跳转至

全链路自动化 域名 dns 解析 与 https 协议,代理 K8s 服务

一、腾讯云 DNS 解析

域名类别介绍

  • 二级域名:*
  • 例如:abc.linuxnbg.comchina.linuxnbg.com123.linuxnbg.com
  • 三级域名:*.datarc
  • 例如:abc.datarc.linuxnbg.combeijing.datarc.linuxnbg.com123.datarc.linuxnbg.com

  • 其余域名:core

  • 例如:存储桶 core.linuxnbg.com、建议单独写

image-20221008170929099

image-20221008170929099

添加两条记录:

  • *:所有的二级域名 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

按照需求开启白名单。

image-20221008175310843

三、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