KCI内域名解析

最近更新时间:2022-03-15 14:06:45

查看PDF

如果您已成功通过自建Kubernetes集群中创建云上的容器实例,后续某些容器实例访问线下服务的场景,需要配置域名解析来实现。

场景1:容器实例通过IDC内自建镜像仓库拉取镜像

您可以通过vk维度/pod维度两种配置方式,来更新容器实例底层的DNS相关配置,实现对IDC内镜像仓库的域名解析。

vk维度配置通过环境变量指定,对vk所管理的所有容器实例生效:

环境变量 含义 是否必填
KCI_HOST_ALIASES 若需使用自建镜像仓库,在vk级别配置实例hostAliases,生效于该vk所管理的实例底层系统内,用于解析镜像仓库地址,必须为json字符串格式(参考Adding additional entries with hostAliases
KCI_DNS_CONFIG 若需使用自建镜像仓库,在vk级别配置实例dnsconfig,生效于该vk所管理的实例底层系统内,用于解析镜像仓库地址,必须为json字符串格式(参考Pod’s DNS Config

Yaml示例如下:

...
          env:
            - name: VKUBELET_POD_IP
              valueFrom:
                fieldRef:
                  fieldPath: status.podIP
            - name: TEMP_AKSK_CM
              value: user-temp-aksk
            - name: KCI_CLUSTER_ID
              value: ${cluster_id} 
            - name: KCI_SUBNET_ID
              value: ${subnet_id}
            - name: KCI_SECURITY_GROUP_IDS
              value: ${security_group_ids} 
            # 使用自建镜像仓库时,指定该虚拟节点所管理的实例底层系统的hostAliases配置
            - name: KCI_HOST_ALIASES
              value: '[{"ip":"1.2.3.4","hostnames":["www.privaterepo1.com"]},{"ip":"2.3.4.5","hostnames":["www.privaterepo2.com"]}]'
            # 使用自建镜像仓库时,指定该虚拟节点所管理的实例底层系统的dnsconfig配置
            - name: KCI_DNS_CONFIG
              value: '{"nameservers":["1.1.1.1"],"options":[{"name":"ndots","value":"2"},{"name":"timeout","value":"3"}],"searches":["test1.com"]}'
...  

Pod维度通过 annotation 配置:

Annotation Key Annotation Value示例 是否必填 描述
k8s.ksyun.com/kci-dns-config '{"nameservers":["1.1.1.1"],"options":[{"name":"ndots","value":"2"},{"name":"timeout","value":"3"}],"searches":["test1.com"]}' 使用自建镜像仓库时,若未在vk维度配置,可在实例维度配置dnsconfig,生效于实例底层系统内,用于解析镜像仓库地址,必须为json字符串格式(参考Pod’s DNS Config
k8s.ksyun.com/kci-host-aliases '[{"ip":"1.2.3.4","hostnames":["www.privaterepo1.com"]},{"ip":"2.3.4.5","hostnames":["www.privaterepo2.com"]}]' 使用自建镜像仓库时,若未在vk维度配置,可在实例维度配置hostAliases,生效于实例底层系统内,用于解析镜像仓库地址,必须为json字符串格式(参考Adding additional entries with hostAliases

Yaml示例如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-rbkci
  namespace: default
  labels:
    app: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
        annotations:
            k8s.ksyun.com/kci-dns-config: '{"nameservers":["1.1.1.1"],"options":[{"name":"ndots","value":"2"},{"name":"timeout","value":"3"}],"searches":["test1.com"]}'   #实例维度配置dnsconfig,生效于实例底层系统内,用于解析镜像仓库地址
            k8s.ksyun.com/kci-host-aliases: '[{"ip":"1.2.3.4","hostnames":["www.privaterepo1.com"]},{"ip":"2.3.4.5","hostnames":["www.privaterepo2.com"]}]'   #实例维度配置hostAliases,生效于实例底层系统内,用于解析镜像仓库地址
        labels:
            app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest
      nodeName: rbkci-virtual-kubelet   #指定nodeName将pod调度到虚拟节点上

场景2:容器实例内访问IDC内网域名

从容器内访问内网服务时,域名解析需通过集群内Coredns服务。为实现从容器实例到集群Coredns服务的连通性,需进行如下配置:

  1. vk启动参数中指定--cluster-dns为Coredns的服务地址

Yaml示例如下:

...
          args:
            - --nodename=rbkci-virtual-kubelet
            # 指定虚拟节点的DNS配置,为集群内coredns服务的IP地址
            - --cluster-dns=10.254.0.10
            - --cluster-domain=cluster.local
            - --kcilet-kubeconfig-path=/root/.kube/config
            - --enable-node-lease
 ...
  1. 对目标容器使能Kube-proxy,以支持ClusterIP访问

创建实例时可通过Pod template annotation对该pod开启Kube-proxy:

Annotation Key Annotation Value示例 是否必填 描述
k8s.ksyun.com/kci-kube-proxy-enabled ‘true’ / ‘false’ 默认值:‘false’。当为true时,为该pod开启kube-proxy,使该pod具备访问集群内clusterIP类型服务的能力;否则不开启。

Yaml示例如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-rbkci
  namespace: default
  labels:
    app: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
        annotations:
            k8s.ksyun.com/kci-kube-proxy-enabled: 'true'  #对该pod使能Kube-proxy
        labels:
            app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest
      nodeName: rbkci-virtual-kubelet   #指定nodeName将pod调度到虚拟节点上

注:

Kube-proxy也支持通过启动参数--kube-proxy-enable在vk维度进行全局配置(参数缺省值为false),开启后则默认该vk管理的所有pod都会开启Kube-proxy,支持ClusterIP访问。Pod annotation中配置优先级高于vk全局配置。

vk yaml示例如下:

...
          args:
            - --nodename=rbkci-virtual-kubelet
            # 指定虚拟节点的DNS配置,为集群内coredns服务的IP地址
            - --cluster-dns=10.254.0.10
            - --cluster-domain=cluster.local
            - --kcilet-kubeconfig-path=/root/.kube/config
            - --enable-node-lease
            # 虚拟节点管理的所有实例使能kube-proxy
            - --kube-proxy-enable
...

文档内容是否对您有帮助?

根本没帮助
文档较差
文档一般
文档不错
文档很好

在文档使用中是否遇到以下问题

内容不全,不深入
内容更新不及时
描述不清晰,比较混乱
系统或功能太复杂,缺乏足够的引导
内容冗长

更多建议

0/200

评价建议不能为空

提交成功!

非常感谢您的反馈,我们会继续努力做到更好!

问题反馈