问题描述
由于我要面对issue,默认为/etc/resolv.conf
,因此我要覆盖Pod的dns策略。另一个问题是,由于Pod的默认/etc/resolv.conf
,该Pod无法连接到smtp服务器服务器
因此,希望应用于部署/ pod的dnspolicy是:
dnsConfig:
nameservers:
- <ip-of-the-node>
options:
- name: ndots
value: '5'
searches:
- monitoring.svc.cluster.local
- svc.cluster.local
- cluster.local
dnsPolicy: None
在以上配置中,nameservers
必须是部署pod的节点的IP。由于我有三个工作程序节点,因此无法将值硬编码为特定工作程序节点的IP。我不希望将Pod配置为部署到特定节点,因为如果资源不足以使Pod部署在特定节点上,则Pod可能会保持挂起状态。
如何使nameservers
获得部署pod的节点的IP地址的值?
或者可以使用某种通用参数更新nameservers
,以便Pod能够连接到smtp服务器。
解决方法
dnsConfig
support up to 3 IP addresses已指定,因此从理论上讲,您可以在nameservers
字段中对其进行硬编码。但是,作为解决方法,您可以将节点ip地址作为env variable and then pass it to the pod传递。示例:
spec:
containers:
- name: envar-demo-container
command: ["/bin/sh"]
args: ["-c","printenv NODE_IP >> /etc/resolv.conf"]
image: nginx
env:
- name: NODE_IP
valueFrom:
fieldRef:
fieldPath: status.hostIP
fieldPath: status.hostIP
获取部署pod的节点的IP地址,并将其保存为环境变量。然后将其写入/etc/resolv.conf
。