Tim*_*nes 3 dns amazon-web-services kubernetes kube-dns
我在AWS中运行了一个带有自动缩放节点的Kubernetes v1.4集群.我还有一个具有仅SSL连接(FQDN通用名称)和公共DNS条目的Mongo副本集群集:
Kubernetes节点是允许访问mongo集群的安全组的一部分,但只能通过其私有IP访问.
有没有办法在查询公共FQDN时使用私有IP在Kubernetes DNS中创建A记录?
我尝试的第一件事是在启动时更新/ etc/hosts的脚本和ConfigMap组合(参考.这是一种向kube-dns添加任意记录的方法吗?),但这是有问题的,因为其他Kubernetes服务也可能更新主机在不同时间提交文件.
我还尝试了一个Services&Enpoints配置:
---
apiVersion: v1
kind: Service
metadata:
name: node1.mongo.example.com
spec:
ports:
- protocol: TCP
port: 27017
targetPort: 27017
---
apiVersion: v1
kind: Endpoints
metadata:
name: node1.mongo.example.com
subsets:
- addresses:
- ip: 192.168.0.1
ports:
- port: 27017
Run Code Online (Sandbox Code Playgroud)
但这失败了,因为服务名称不能是FQDN ...
虽然起初并不那么明显,但解决方案非常简单.最近版本中的kube-dns图像包含dnsmasq其中一个组件.如果您查看其手册页,您将看到一些有用的选项.在讲座之后,您可以选择类似于此的路径:
创建一个ConfigMap来存储你的dns映射:
apiVersion: v1
kind: ConfigMap
metadata:
name: kube-dns
namespace: kube-system
data:
myhosts: |
10.0.0.1 foo.bar.baz
Run Code Online (Sandbox Code Playgroud)
在群集中应用ConfigMap后,您现在可以对kube-dns-vXX您在kubernetes中使用的部署进行一些更改.
定义将CM暴露给的卷 dnsmasq
volumes:
- name: hosts
configMap:
name: kube-dns
Run Code Online (Sandbox Code Playgroud)
和mount在deploy/rc模板的dnsmasq容器中kube-dns
volumeMounts:
- name: hosts
mountPath: /etc/hosts.d
Run Code Online (Sandbox Code Playgroud)
最后,在你的dnsmasq参数中添加一个小的配置标志:
args:
- --hostsdir=/etc/hosts.d
Run Code Online (Sandbox Code Playgroud)
现在,当您将这些更改应用于kube-dns-vXX群集中的部署时,它将挂载configmap并使用/etc/hosts.d/中安装的文件(具有典型的主机文件格式)作为知识来源dnsmasq.因此,如果您现在在pod中查询foo.bar.baz,它们将解析为相应的IP.这些条目优先于公共DNS,因此它完全适合您的情况.
请注意,dnsmasqConfigMap中没有注意更改,因此如果更改,必须手动重新启动.
几分钟前在实时集群上对此进行了测试和验证.
| 归档时间: |
|
| 查看次数: |
1169 次 |
| 最近记录: |