如何在dnsConfig中将节点IP设置为名称服务器?

问题描述

由于我要面对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