zoukankan      html  css  js  c++  java
  • 配置Pod的 /etc/hosts

    某些情况下,DNS 或者其他的域名解析方法可能不太适用,您需要配置 /etc/hosts 文件,在Linux下是比较容易做到的,在 Kubernetes 中,可以通过 Pod 定义中的 hostAliases 字段向 Pod 的 /etc/hosts 添加条目。

    适用其他方法修改 Pod 的 /etc/hosts 文件是不被推荐的,因为 kubelet 可能在重新创建 Pod 时,就会覆盖这些修改。

    默认hosts文件内容

    通过创建一个 Nginx Pod,我们可以查看Pod创建后,/etc/hosts 文件的默认内容,执行命令:

    kubectl run nginx --image nginx --generator=run-pod/v1   
    

    执行命令查看 Pod 的IP:

    kubectl get pods -o wide
    

    输出结果如下所示:

    NAME     READY     STATUS    RESTARTS   AGE    IP           NODE
    nginx    1/1       Running   0          13s    10.200.0.4   worker0
    

    执行命令查看hosts文件的内容

    kubectl exec nginx -- 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.200.0.4	nginx
    

    默认情况下, hosts 文件只包含 IPv4 和 IPv6 的基本配置,例如 localhost 和该 Pod 自己的 hostname。

    使用hostAliases添加额外的条目

    通过 Pod 定义中的 .spec.hostAliases 字段,我们可以向 Pod 的 /etc/hosts 文件中添加额外的条目,用来解析 foo.localbar.local127.0.0.1 和 foo.remotebar.remote10.1.2.3,如下所示:
    host-aliases-pod.yaml文件内容

    apiVersion: v1
    kind: Pod
    metadata:
      name: hostaliases-pod
    spec:
      restartPolicy: Never
      hostAliases:
      - ip: "127.0.0.1"
        hostnames:
        - "foo.local"
        - "bar.local"
      - ip: "10.1.2.3"
        hostnames:
        - "foo.remote"
        - "bar.remote"
      containers:
      - name: cat-hosts
        image: busybox
        command:
        - cat
        args:
        - "/etc/hosts"    
    

    执行一下命令可创建该 Pod:

    kubectl apply -f host-aliases-pod.yaml
    

    执行命令查看 Pod 的 IP 和状态:

    kubectl get pod --output=wide
    

    输出结果如下所示:

    NAME                           READY     STATUS      RESTARTS   AGE       IP              NODE
    hostaliases-pod                0/1       Completed   0          6s        10.200.0.5      worker0
    

    执行命令查看 hosts 文件内容:

    kubectl logs hostaliases-pod
    

    输出结果如下所示:

    # 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.200.0.5	hostaliases-pod
    
    # Entries added by HostAliases.
    127.0.0.1	foo.local	bar.local
    10.1.2.3	foo.remote	bar.remote
    

    从结果中,我们可以看到,配置的条目被添加在 /etc/hosts 文件的末尾。

    为什么kubelet要管理hosts文件

    Kubelet 管理

    hosts修改

    该文件。

    细节情况请参考两个 github issue:

    https://github.com/kubernetes/kubernetes/issues/14633

    https://github.com/moby/moby/issues/17190

    由于该文件已经被 Kubelet 管理起来,任何对该文件手工修改的内容,都将在 Kubelet 重启容器或者 Pod 重新调度时被覆盖。因此,最好是通过 修改 Pod 的 /etc/hosts 文件,而不是手工修改。

  • 相关阅读:
    nowcoderD Xieldy And His Password
    Codeforces681D Gifts by the List
    nowcoder80D applese的生日
    Codeforces961E Tufurama
    Codeforces957 Mahmoud and Ehab and yet another xor task
    nowcoder82E 无向图中的最短距离
    nowcoder82B 区间的连续段
    Codeforces903E Swapping Characters
    Codeforces614C Peter and Snow Blower
    Codeforces614D Skills
  • 原文地址:https://www.cnblogs.com/sanduzxcvbnm/p/13042568.html
Copyright © 2011-2022 走看看