• 如何在docker容器、Kubernetes的Pod中添加/etc/hosts配置【转】


    如何在docker容器、Kubernetes的Pod中添加/etc/hosts配置.md

    一、概述

    在实际业务场景中,经常会出现需要配置/etc/hosts 内容的情况,即使现在向docker和k8s方向转变,仍然是存在小部分这样的需求的。假如入内网里面有专用的内部DNS服务器的话,配置到内网DNS服务器才是最好的选择,如果真没有,那么这就告诉你以下几种方式如何配置/etc/hosts。

    二、直接docker run的容器

    直接docker run的容器,可以通过docker run的时候指定–add-host参数,就可以实现,如下

    docker run -itd --add-host www.baidu.com:202.102.1.1 centos:7

    进入容器后可以看到/etc/hosts内容

    [root@iZ2zegjjeracuigce27w49Z ~]# docker exec -it d9fe /bin/bash
    [root@d9fe9a36af37 /]# cat /etc/hosts
    127.0.0.1   localhost
    ::1 localhost ip6-localhost ip6-loopback
    fe00::0 ip6-localnet
    ff00::0 ip6-mcastprefix
    ff02::1 ip6-allnodes
    ff02::2 ip6-allrouters
    202.102.1.1 www.baidu.com
    169.254.123.2   d9fe9a36af37
    [root@d9fe9a36af37 /]# 

    三、使用docker-compose编排

    使用docker-compose时,添加如下参数就可以实现
    需要注意下文件格式的版本,目前2版本兼容性最好

    extra_hosts:
     - "somehost:162.242.195.82"
     - "otherhost:50.31.209.229"

    四、Kubernetes

    Kubernetes在官方文档中给出了如何给Pod设置/etc/hosts条目的方法,但是我们一般是用deployment来部署应用的,需要按照如下的方法配置

    ---
    kind: Deployment
    apiVersion: extensions/v1beta1
    metadata:
      name: stilton
      labels:
        app: cheese
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: cheese
      template:
        metadata:
          labels:
            app: cheese
        spec:
          containers:
          - name: cheese
            image: errm/cheese:stilton
            ports:
            - containerPort: 80
          hostAliases:
            - ip: 127.0.0.1
              hostnames:
              - myadded.examplehostname

    注意hostAliases这一行和containers以及restartPolicy是同一级的,json格式如下

            "restartPolicy": "Always",
            "terminationGracePeriodSeconds": 30,
            "dnsPolicy": "ClusterFirst",
            "hostAliases": [
              {
                "ip": "127.0.0.1",
                "hostnames": [
                  "myadded.examplehostname"
                ]
              }
            ]
     

    登陆到pod里面可以看到添加的内容

    # 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.210.1.138 micro-ipsvr-web-5b855cc4d6-wz24x
    
    # Entries added by HostAliases.
    127.0.0.1 myadded.examplehostname

    或许会有人想:可不可以直接把这些域名映射关系配置到kube-dns(coredns)里面,这样所有的Pod都可以同步kube-dns获取到了?
    翻阅了一下相关的文档,目前还是实现不了的。

    参考资料

    https://docs.docker.com/compose/compose-file/compose-file-v2/
    https://kubernetes.io/zh/docs/concepts/services-networking/add-entries-to-pod-etc-hosts-with-host-aliases/

  • 相关阅读:
    【leetcode】Validate Binary Search Tree
    【leetcode】Add Binary
    【leetcode】Search a 2D Matrix
    绑定方法与非绑定方法||反射||内置方法
    封装||property
    组合||抽象类||多态||鸭子类型
    在子类中重用父类的属性
    继承||派生||继承实现原理
    面向对象小练习
    面向对象编程
  • 原文地址:https://www.cnblogs.com/paul8339/p/13410510.html
Copyright © 2020-2023  润新知