kubernetes hostAliases
kubernetes 添加Pod的/etc/hosts
配置Pod的 /etc/hosts
某些情况下,DNS 或者其他的域名解析方法可能不太适用,你需要配置 /etc/hosts 文件,在 Linux 下是比较容易做到的,在 kubernetes 中,可以通过 Pod 定义中的 hostAliases
字段向 Pod的 /etc/hosts 添加条目。
建议通过使用 HostAliases 来进行修改,因为该文件由 kubelet 管理,并且可以在 Pod 创建/重启过程中被重写。
使用 hostAliases 添加额外的条目
通过 Pod 定义中的 .spec.template.spec.hostAliases 字段,我们可以向 Deployment的 /etc/hosts
文件中添加额外的条目,用来解析 www.baidu.com
到 127.0.0.1
, 如下所示:
kind: Deployment
apiVersion: apps/v1
metadata:
name: centos7
labels:
app: centos7
spec:
replicas: 1
selector:
matchLabels:
app: centos7
template:
metadata:
labels:
app: centos7
spec:
#-------------------------------------------
hostAliases: #配置hosts文件
- ip: "127.0.0.1" #配置解析的IP
hostnames:
- "www.baidu.com" #配置域名
#-------------------------------------------
containers:
- name: service-provider
image: centos:7.7.1908
command:
- "/bin/sh"
args:
- "-c"
- "while true; do sleep 999999; done"
执行下面的命令可以创建该 Deployment:
kubectl create -f hosts.yaml
执行完成后查看 Deployment 的IP 和状态:
kubectl get deploy --output=wide
输出结果如下:
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
centos7 1/1 1 1 2m52s service-provider centos:7.7.1908 app=centos7
进入镜像查看/etc/hosts
接下来将要进入刚刚部署的 Deployment 的Pod中,查看 hosts 文件是否发生了变化。
kubectl get pod -l app=centos7
输出结果如下:
NAME READY STATUS RESTARTS AGE
centos7-d8bcd5-n2g2l 1/1 Running 0 8m42s
查看 Pod 内部的 /etc/hosts 文件
kubectl exec -it centos7-d8bcd5-n2g2l -- cat /etc/hosts
输出结果如下:
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
fe00::0 ip6-mcastprefix
fe00::1 ip6-allnodes
fe00::2 ip6-allrouters
10.244.0.32 centos7-d8bcd5-n2g2l
127.0.0.1 www.baidu.com
从结果中,我们可以看到,配置的条目被添加在 /etc/hosts 文件的末尾。