工作中遇到需要在容器中配置hosts文件。直接写在镜像里是没有用的,因为容器启动时会覆盖镜像中的hosts文件 。所以使用此方法来做配置。下面引用的官方文档的说明。
当 DNS 配置以及其它选项不合理的时候,通过向 Pod 的 /etc/hosts 文件中添加条目,可以在 Pod 级别覆盖对主机名的解析。
建议通过使用 HostAliases 来进行修改,因为该文件由 Kubelet 管理,并且可以在 Pod 创建/重启过程中被重写
默认的hosts文件内容
1
2
3
4
5
6
7
8
9
10
|
[root@k8s-77-40 k8s]# kubectl exec -it nginx-test-5f8d8ff4bf-2d8fs /bin/bash
root@nginx-test-5f8d8ff4bf-2d8fs:/# cat /etc/hosts
# Kubernetes-managed hosts file.
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
172.21.1.9 nginx-test-5f8d8ff4bf-2d8fs
|
通过HostAliases增加额外的解析
- 修改相关yaml, 其中spec.template.spec.hostAliases为添加内容。增加了两个地址解析
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
27
28
29
30
31
|
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-test
labels:
app: nginx
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
# hostname: test
hostAliases:
- ip: "172.16.2.57"
hostnames:
- "saps4dev.test.com"
- ip: "172.16.7.176"
hostnames:
- "saps4prd.test.com"
terminationGracePeriodSeconds: 3 #k8s将会给应用发送SIGTERM信号,可以用来正确、优雅地关闭应用,默认为30秒
containers:
- name: nginx
image: nginx:1.17.6
imagePullPolicy: Always
ports:
- containerPort: 80
|
1
|
[root@k8s-77-40 k8s]# kubectl apply -f nginx.yaml
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
[root@k8s-77-40 k8s]# kubectl exec -it nginx-test-6bcb84f7c5-9zwx5 /bin/bash
root@nginx-test-6bcb84f7c5-9zwx5:/# cat /etc/hosts
# Kubernetes-managed hosts file.
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
172.21.2.11 nginx-test-6bcb84f7c5-9zwx5
# Entries added by HostAliases.
172.16.2.57 saps4dev.test.com
172.16.7.176 saps4prd.test.com
|
至此 hosts修改成功
Author
dylan
LastMod
2020-03-21
License
如需转载请注明文章作者和出处。谢谢!