全链路自动化 域名 dns 解析 与 https 协议,代理 K8s 服务 ¶
一、腾讯云 DNS 解析 ¶
域名类别介绍 ¶
- 二级域名:*
- 例如:
abc.linuxnbg.com
、china.linuxnbg.com
、123.linuxnbg.com
- 三级域名:*.datarc
-
例如:
abc.datarc.linuxnbg.com
、beijing.datarc.linuxnbg.com
、123.datarc.linuxnbg.com
-
其余域名:core
- 例如:存储桶
core.linuxnbg.com
、建议单独写
添加两条记录:
*
:所有的二级域名 A 记录 指向至 网关服务器host
(记录值为host
)- 实现效果:访问 <任意>.linuxnbg.com 流量都会指向网关服务器
*.datarc
:指定一条三级域名 A 记录 指向至网关服务器host
- 实现效果:访问 <任意>.datarc.linuxnbg.com 流量都会指向网关服务器
目前将所有流量打到网关服务器,但是还缺少中间件代理网关服务,一般常见为 Nginx
。 为了实现全栈 https
效果,使用 Caddy
作为网关服务。
二、使用 Caddy 网关服务 ¶
安装 Caddy
# centos 安装 caddy
# ubuntu 安装 caddy
安装 dnspod 插件
安装完成后重启生效
caddy list-modules|grep dnspod ; [ $? -eq 0 ] || (echo 不存在,正在安装 ; caddy add-package github.com/caddy-dns/dnspod ; systemctl restart caddy)
编写 caddy 规则
文件位于 /etc/caddy/
,修改后重启生效。
# 定义 dnspod ,有需要的地方 import
(dnspod) {
tls {
# 申请 tocken: https://console.dnspod.cn/account/token/token
dns dnspod <ID,Tocken>
# 根据 ssl-config.mozilla.org 推荐的安全配置
protocols tls1.2 tls1.3
ciphers TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256
# 根据 https://github.com/caddyserver/caddy/pull/4723 关闭传播检查
propagation_timeout -1
# 如果是非标端口 80,443 需要加下面这一条 https://docs.dnspod.com/dns/modifying-dns-server-zh/
#resolvers mosca.dnspod.net
}
}
# 将所有 *.datarc.linuxnbg.com 流量全部打到 10.0.0.1:3000 10.0.0.2:3000 Nginx-ingress的 service 的 host。随后 Nginx-ingress 判断将 某条流量打至某个命名空间地址
*.datarc.linuxnbg.com {
import dnspod
handle {
reverse_proxy 10.0.0.1:3000 10.0.0.2:3000
}
}
*.linuxnbg.com linuxnbg.com {
import dnspod
header Strict-Transport-Security "max-age=63072000"
@mkdocs host mkdocs.linuxnbg.com
handle @mkdocs {
reverse_proxy 127.0.0.1:10001
}
handle {
abort
}
@yuan host yuan.linuxnbg.com
handle @yuan {
@ip_whitelist {
remote_ip 101.71.100.0/24 101.71.101.0/24 101.71.105.0/24 111.20.28.0/24 111.20.29.0/24 111.32.207.0/24 112.49.30.0/24 112.49.31.0/24 113.200.123.0/24 113.201.154.0/24 113.219.202.0/24 113.219.203.0/24 116.162.152.0/24 116.162.153.0/24 117.147.229.0/24 117.147.230.0/24 117.147.231.0/24 120.226.27.0/24 122.246.30.0/24 122.246.31.0/24 123.150.77.0/24 182.254.63.0/24 183.56.148.0/24 183.61.174.0/24 219.144.88.0/24 219.144.89.0/24 219.144.90.0/24 222.79.116.0/24 222.79.117.0/24 223.109.210.0/24 27.44.206.0/24 36.158.253.0/24 36.250.235.0/24 36.250.5.0/24 36.250.8.0/24 43.137.149.0/24 43.140.24.0/24
}
route @ip_whitelist {
reverse_proxy 127.0.0.1:10001
}
respond "Blocked" 403
}
handle_errors {
@deploy expression `{err.status_code} in [502]`
handle @deploy {
respond "服务器欠电费了,请稍候"
}
}
}
申请 tocken:
https://console.dnspod.cn/account/token/token
按照需求开启白名单。
三、K8s nginx-ingress 转发规则 ¶
# 编写 ingress-nginx 规则
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress
namespace: saas-jenkins
# saas 前缀区分自己服务与客户服务的区别,jenkins 服务名
spec:
ingressClassName: nginx
rules:
- host: "jenkins.datarc.linuxnbg.com"
# jenkins 服务名
http:
paths:
- backend:
service:
name: web-svc
# 需要暴漏的 web服务的 server 名称
port:
number: 8000
path: /
pathType: Prefix