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 文件,而不是手工修改。

  • 相关阅读:
    父子进程 signal 出现 Interrupted system call 问题
    一个测试文章
    《淘宝客户端 for Android》项目实战 html webkit android css3
    Django 中的 ForeignKey ContentType GenericForeignKey 对应的数据库结构
    coreseek 出现段错误和Unigram dictionary load Error 新情况(Gentoo)
    一个 PAM dbus 例子
    漫画统计学 T分数
    解决 paramiko 安装问题 Unable to find vcvarsall.bat
    20141202
    js
  • 原文地址:https://www.cnblogs.com/sanduzxcvbnm/p/13042568.html
Copyright © 2011-2022 走看看