k8s配置hosts域名的几种方式
方式一:使用hostAlias标签
参考例子:https://www.jianshu.com/p/3e6564edbe74
我们可以在Deployment资源类型的文件里配置hostAlias标签,例子如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| apiVersion: v1 kind: ReplicationController metadata: name: dp-rc namespace: default spec: replicas: 1 selector: name: dp-pod template: metadata: labels: name: dp-pod spec: hostAliases: - ip: 192.168.176.247 hostnames: - "dccas.finupgroup.com" containers: - name: dp image: reg.k8s.dc.finupgroup.com/datacenter/dp:latest imagePullPolicy: Always ports: - containerPort: 8080
|
方式二:coredns里面添加
参考例子:https://blog.csdn.net/u010533742/article/details/109641426
这个是在容器启动的情况下是有效果的,但对于拉镜像的时候,私有仓库很多时候是内网,有需要外部临时访问的时候,那可能没效果,第一道防线就卡主了。
可以在kube-system命令空间下的 coredns这种configmap类型的资源文件里添加:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| $ kubectl get pod -n kube-system |grep dns coredns-5db5696c7-lzxdh 1/1 Running 0 17d $ kubectl edit cm coredns -n kube-system Corefile: | .:53 { errors health { lameduck 5s } ready kubernetes cluster.local in-addr.arpa ip6.arpa { pods insecure fallthrough in-addr.arpa ip6.arpa } hosts { 192.168.11.241 www.girls.cn 192.168.11.240 harbor.girls.cn fallthrough } prometheus :9153 forward . "/etc/resolv.conf" cache 30 loop reload loadbalance }
|
方式三:使用node节点上的hosts
DNS 策略
在 kubernetes 中还提供了 dnsPolicy 决定 Pod 内预设 DNS 配置策略:
- None 无任何策略
- Default 默认
- ClusterFirst 集群 DNS 优先
- ClusterFirstWithHostNet 集群 DNS 优先,并伴随着使用宿主机网络
场景1 对接kubernetes内置的Kube-DNS/CoreDNS
场景说明:
这种方式适用于应用中的域名解析只涉及集群内部域名,或者集群内部域名+外部域名两种方式,应用默认采用这种配置。
示例:
1 2 3 4 5 6 7 8 9 10
| apiVersion: v1 kind: Pod metadata: namespace: default name: dns-example spec: containers: - name: test image: nginx:alpine dnsPolicy: ClusterFirst
|
该配置下容器的域名解析文件将如下所示:
nameserver 10.247.3.10
search default.svc.cluster.local svc.cluster.local cluster.local
options ndots:5
场景2 直接对接云DNS
场景说明:
这种方式适用于应用只访问注册到互联网的外部域名,该场景不能解析集群内部域名。
示例:
1 2 3 4 5 6 7 8 9 10
| apiVersion: v1 kind: Pod metadata: namespace: default name: dns-example spec: containers: - name: test image: nginx:alpine dnsPolicy: Default //使用kubelet的“--resolv-conf”参数指向的域名解析文件(CCE集群在该配置下对接云DNS)
|
该配置下容器的域名解析文件将如下所示:
nameserver 100.125.x.x
场景3 主机网络模式的应用对接Kube-DNS/CoreDNS
场景说明:
对于配置主机网络模式的应用,默认对接云DNS,如果应用需要对接Kube-DNS/CoreDNS,需将dnsPolicy设置为“ClusterFirstWithHostNet”。
示例:
1 2 3 4 5 6 7 8 9 10 11 12
| apiVersion: v1 kind: Pod metadata: name: nginx spec: hostNetwork: true dnsPolicy: ClusterFirstWithHostNet containers: - name: nginx image: nginx:alpine ports: - containerPort: 80
|
该配置下容器的域名解析文件将如下所示:
nameserver 10.247.3.10
search default.svc.cluster.local svc.cluster.local cluster.local
options ndots:5
场景4 自定义应用的域名配置
场景说明:
用户可以完全自定义配置应用的域名解析文件,这种方式非常灵活,dnsPolicy和dnsConfig配合使用,几乎能够满足所有使用场景,如对接用户自建DNS的场景、串联多个DNS的场景以及优化DNS配置选项的场景等等。
示例1:对接用户自建DNS
该配置下,dnsPolicy为“None”,应用的域名解析文件完全根据dnsConfig配置生成。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| apiVersion: v1 kind: Pod metadata: namespace: default name: dns-example spec: containers: - name: test image: nginx:alpine dnsPolicy: "None" dnsConfig: nameservers: - 10.2.3.4 //用户自建DNS的IP地址 searches: - ns1.svc.cluster.local - my.dns.search.suffix options: - name: ndots value: "2" - name: timeout value: "3"
|
该配置下容器的域名解析文件将如下所示:
nameserver 10.2.3.4
search ns1.svc.cluster.local my.dns.search.suffix
options timeout:3 ndots:2
参考资料1
参考资料2