将主机映射添加到Kubernetes中的/ etc / hosts
我有一个与kubernetes DNS映射的问题。 请看细节,
我们有一些可以从互联网上访问的服务器。 全球DNS将这些服务器的域名转换为公共互联网IP。 出于安全考虑,某些服务无法通过公共IP访问。
从公司内部,我们将私有IP地址的DNS映射添加到由kubernetespipe理的docker容器内的/ etc / hosts中以手动访问这些服务器。
我知道docker支持命令–add-host在执行“docker run”时更改/ etc / hosts。 我不确定这个命令是否支持最新的kubernetes,例如kuber 1.4或1.5?
另一方面,我们可以封装Docker容器的启动脚本,
- 首先将映射追加到/ etc / hosts
- 开始我们的申请
我只想在每个容器中首次运行后更改文件一次。 有没有一种简单的方法来做到这一点,因为在开发和生产环境之间的映射关系可能是不同的,或者由kubernetes本身提供的任何相关的命令?
感谢您的帮助。
要以“半”dynamic方式将主机名添加到hosts文件,可以使用postStart挂钩:
spec: containers: - name: somecontainer image: someimage lifecycle: postStart: exec: command: - "cat" - "someip" - "somedomain" - ">" - "/etc/hosts"
然而,更好的方法是在多个阶段使用代表服务的抽象名称。 例如,不是使用database01.production.company.com,而是使用database01并设置环境,以便在生产设置中将其分解为生产,并在分段设置中进行分段。
最后,还可以编辑kubedns设置,以便可以使用kubernetes DNS来检索外部DNS名称。 那么你只需要在代码中使用任何你需要的名字,它只是“自动地”运作。 看例如https://github.com/kubernetes/kubernetes/issues/23474关于如何设置这个(从版本到版本的skydns有所不同:一些较旧的人真的不能用这个,所以升级到至lesskube 1.3使这个工作正常)
您应该可以添加一个没有select器的Service
,并手动创buildEndpoint
对象,如文档中所述 – http://kubernetes.io/docs/user-guide/services/#services-without-selectors
服务通常抽象化访问Kubernetes Pods,但是他们也可以抽象其他种类的后端。
例如:
你想在生产中有一个外部数据库集群,但是在testing中你使用自己的数据库。
您希望将您的服务指向另一个名称空间或另一个群集中的服务。
您正在将工作负载迁移到Kubernetes,而您的一些后端则在Kubernetes之外运行。
在主机系统(或秘密)上用所需的所有额外主机创build一个文件(例如/ tmp / extra-hosts)
然后在K8S清单中:
spec: containers: - name: haproxy image: haproxy lifecycle: postStart: exec: command: ["/bin/sh", "-c", "cat /hosts >> /etc/hosts"] volumeMounts: - name: haproxy-hosts mountPath: /hosts volumes: - name: haproxy-hosts hostPath: path: /tmp/extra-hosts
- 使用Docker容器切换应用程序版本
- 本地计算机上的Docker DNS问题
- Kubernetes本地集群中的networking和DNS与Docker
- kube-dns不能在kubernetesarm上工作
- ReactPHP和docker:无法将主机从phpparsing到nginx容器
- 如何使用Docker for Windows从Windows 10上的DNSparsingWindows容器IP?
- 无法parsingdocker中的主机
- Docker for Windows – 容器域名无法parsing
- 使用Virtual Box无法与Docker(Centos 7)+ DNS服务器(Container Ubuntu 14.04)通信