如果您已成功通过自建Kubernetes集群中创建云上的容器实例,后续某些容器实例访问线下服务的场景,需要配置域名解析来实现。
您可以通过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调度到虚拟节点上
从容器内访问内网服务时,域名解析需通过集群内Coredns服务。为实现从容器实例到集群Coredns服务的连通性,需进行如下配置:
--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
...
创建实例时可通过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访问。Podannotation
中配置优先级高于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 ...
文档内容是否对您有帮助?
评价建议不能为空
非常感谢您的反馈,我们会继续努力做到更好!