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

Rak*_*ian 5 openshift openshift-origin kubernetes kubernetes-pod okd

我正在覆盖 pod 的 dns 策略,因为我面临着pod 的默认问题/etc/resolv.conf。另一个问题是由于/etc/resolv.confpod 的默认设置,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
Run Code Online (Sandbox Code Playgroud)

在上面的配置中,nameservers需要是部署 pod 的节点的 IP。由于我有三个工作节点,我无法将值硬编码到特定工作节点的 IP。我不希望将 pod 配置为部署到特定节点,因为如果资源不足以让 pod 部署到特定节点,则 pod 可能会保持挂起状态。

如何nameservers获取部署 pod 的节点的 IP 地址的值?

或者是否可以nameservers使用某种通用参数更新pod,以便 pod 能够连接到 smtp 服务器。

Mar*_* K. 4

dnsConfig 支持最多指定 3 个 IP 地址,因此理论上您可以在现场对其进行硬编码nameservers。但是,作为解决方法,您可以将节点 IP 地址作为env 变量传递,然后将其传递给 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
Run Code Online (Sandbox Code Playgroud)

fieldPath: status.hostIP获取部署 pod 的节点的 IP 地址并将其保存为环境变量。然后它被写入/etc/resolv.conf