如何在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/

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM