柏理 2020-11-29 91浏览量
上文介绍了 Kubernetes 集群 DNS 服务发现原理。
但在某些场景下,我们希望能够更灵活调整 Pod 默认的 dns 配置,如:
通常,你需要重配置集群 kubelet 的启动参数,或者给应用 YAML 配置 dnsConfig 来达到目的,但是侵入性较强。
本文会介绍 dns-admission-controller 组件,通过 mutating webhook 机制能够在集群级别自动调整 pod 的 dns 配置,灵活性强、侵入性低。
设定集群的 kube-dns 服务 IP 为 172.21.0.10,集群主域名后缀为 cluster.local。首先,需要确定需要调整的 dns 配置。
参数 | 说明 |
---|---|
nameserver | dns 服务的 IP。如果不希望调整,则需要为集群 kube-dns 服务 IP |
clusterDomain | 集群主域名后缀 |
ndots | ndots 值,默认为 3 |
export clusterDomain=cluster.local
export nameserver=172.21.0.10
export ndots=2
curl https://node-local-dns.oss-cn-hangzhou.aliyuncs.com/install_dns-admission-controller.sh -o install_dns-admission-controller.sh;chmod 744 install_dns-admission-controller.sh;bash install_dns-admission-controller.sh $clusterDomain $nameserver $ndots
$ helm list -n kube-system
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
dns-admission-controller kube-system 1 2020-11-29 22:39:56.833004 +0800 CST deployed ack-node-local-dns-admission-controller-0.0.1
$ kubectl get deployment dns-admission-controller -n kube-system
NAME READY UP-TO-DATE AVAILABLE AGE
dns-admission-controller 1/1 1 1 109s
kubectl label namespace default node-local-dns-injection=enabled
注:admission-controller 会忽略 kube-system 和 kube-public 命名空间下的应用。
apiVersion: apps/v1 # for versions before 1.8.0 use apps/v1beta1
kind: Deployment
metadata:
name: ubuntu
labels:
app: ubuntu
spec:
replicas: 2
selector:
matchLabels:
app: ubuntu
template:
metadata:
labels:
app: ubuntu
spec:
containers:
- name: ubuntu
image: ubuntu
command: ["sh", "-c"]
args: ["sleep 100000"]
$ kubectl apply -f ubuntu-deployment.yaml
deployment.apps/ubuntu created
$ kubectl get deployment ubuntu
NAME READY UP-TO-DATE AVAILABLE AGE
ubuntu 2/2 2 2 7s
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
ubuntu-766448f68c-mj8qk 1/1 Running 0 4m39s
ubuntu-766448f68c-wf5hw 1/1 Running 0 4m39s
$ kubectl get pod ubuntu-766448f68c-mj8qk -o=jsonpath='{.spec.dnsConfig}'
map[nameservers:[172.21.0.10] options:[map[name:ndots value:2]] searches:[default.svc.cluster.local svc.cluster.local cluster.local]]
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
集结各类场景实战经验,助你开发运维畅行无忧