1.1. 应用的DNS管理

1.1.1. 自定义Pod的hosts

当 DNS 配置以及其它选项不合理的时候,通过向 Pod 的 /etc/hosts 文件中添加条目,可以在 Pod 级别覆盖对主机名的解析。使用 HostAliases 来进行修改,因为该文件由 Kubelet 管理,并且可以在 Pod 创建/重启过程中被重写。

[root@linux-node1 ~]# kubectl exec dns-test 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
10.2.1.37    dns-test
[root@linux-node1 ~]# vim app-hosts.yaml
apiVersion: v1
kind: Pod
metadata:
  name: app-dns 
spec:
  restartPolicy: Never
  hostAliases:
  - ip: "127.0.0.1"
    hostnames:
    - "www.example.com"
    - "www.opsany.com"
  - ip: "10.1.2.3"
    hostnames:
    - "foo.remote"
    - "bar.remote"
  containers:
  - name: app-dns
    image: alpine
    command:
    - cat
    args:
    - "/etc/hosts"

创建并查看效果

[root@linux-node1 ~]# kubectl create -f app-hosts.yaml 
pod/app-dns created
[root@linux-node1 ~]# kubectl logs pod/app-dns
Error from server (BadRequest): container "app-dns" in pod "app-dns" is waiting to start: ContainerCreating
[root@linux-node1 ~]# kubectl logs pod/app-dns
# 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
10.2.2.56    app-dns

# Entries added by HostAliases.
127.0.0.1    www.example.com    www.opsany.com
10.1.2.3    foo.remote    bar.remote

1.1.2. kubelet为什么要管理hosts

kubelet 管理Pod中每个容器的 hosts 文件,避免 Docker 在容器已经启动之后去修改该文件。

因为该文件是托管性质的文件,无论容器重启或 Pod 重新调度,用户修改该 hosts 文件的任何内容,都会在 Kubelet 重新安装后被覆盖。因此,不建议修改该文件的内容。

Copyright © 赵班长@新运维社区 2019 all right reserved,powered by Gitbook该文件修订时间: 2024-06-18 22:25:30

results matching ""

    No results matching ""