qin*_*zuo 6 dns docker kubernetes
我在kubernetes中的DNS映射有问题。请查看详细信息,
我们有一些可以从互联网访问的服务器。全局DNS将这些服务器的域名转换为公共Internet IP。出于安全考虑,某些服务无法通过公共IP访问。
在公司内部,我们将带有私有IP的DNS映射添加到kubernetes管理的docker容器内的/ etc / hosts中,以手动访问这些服务器。
我知道docker支持命令--add-host在执行“ docker run”时更改/ etc / hosts。我不确定最新的kubernetes(例如kuber 1.4或1.5)是否支持此命令?
另一方面,我们可以包装docker容器的启动脚本,
在每个容器中首次运行后,我只想更改一次文件。是否存在一种简单的方法,因为开发环境和生产环境之间的映射关系可能不同,或者kubernetes本身提供的与此相关的任何命令也是如此?
感谢您的帮助。
eik*_*ooc 19
现在可以hostAliases直接在部署描述中添加一个部分。
作为如何使用本hostAliases节的完整示例,我还包含了示例部署的周围代码。
apiVersion : apps/v1
kind: Deployment
metadata:
name: "backend-cluster"
spec:
replicas: 1
selector:
matchLabels:
app: "backend"
template:
metadata:
labels:
app: "backend"
spec:
containers:
- name: "backend"
image: "exampleregistry.azurecr.io/backend"
ports:
- containerPort: 80
hostAliases:
- hostnames:
- "www.example.com"
ip: "10.0.2.4"
Run Code Online (Sandbox Code Playgroud)
重要的部分只是文件的一部分,为了清楚起见,这里省略了它:
...
hostAliases:
- hostnames:
- "www.example.com"
ip: "10.0.2.4"
Run Code Online (Sandbox Code Playgroud)
要以“半”动态方式向主机文件添加主机名,可以使用postStart钩子:
spec:
containers:
- name: somecontainer
image: someimage
lifecycle:
postStart:
exec:
command:
- "cat"
- "someip"
- "somedomain"
- ">"
- "/etc/hosts"
Run Code Online (Sandbox Code Playgroud)
然而,更好的方法是在多个阶段使用代表服务的抽象名称。例如,不要使用database01.production.company.com使用database01并设置环境,以便在生产设置中解析为生产并在暂存设置中进行暂存。
最后,还可以编辑 kubedns 设置,以便 kubernetes DNS 可用于检索外部 DNS 名称。然后您只需在代码中使用您需要的任何名称,它就可以“自动”工作。例如,请参阅https://github.com/kubernetes/kubernetes/issues/23474了解如何设置(skydns 的版本与版本略有不同:一些较旧的版本确实不适用于此,因此至少升级到kube 1.3 使其正常工作)
使用您需要的所有额外主机(例如 /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
Run Code Online (Sandbox Code Playgroud)
小智 6
来自kubernetes.io/docs:“除了默认的样板文件,我们还可以向 hosts 文件添加其他条目以将 foo.local、bar.local 解析为 127.0.0.1,将 foo.remote、bar.remote 解析为 10.1.2.3,我们可以通过将 HostAliases 添加到 .spec.hostAliases 下的 Pod 中:”
您也可以“配置存根域和上游 DNS 服务器”。
++ 找到这篇文章在 pod 中添加 /etc/hosts 条目:
使用 HostAliases 添加条目到 Pod /etc/hosts:service/networking/hostaliases-pod.yaml
除了默认样板之外,您还可以向主机文件添加其他条目。例如:要将 foo.local、bar.local 解析为 127.0.0.1,将 foo.remote、bar.remote 解析为 10.1.2.3,您可以在 .spec.hostAliases 下为 Pod 配置 HostAliases:
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"
Run Code Online (Sandbox Code Playgroud)
来源: https: //kubernetes.io/docs/concepts/services-networking/add-entries-to-pod-etc-hosts-with-host-aliases/
| 归档时间: |
|
| 查看次数: |
8525 次 |
| 最近记录: |