Как установить IP-адрес узла в качестве сервера имен в dnsConfig?

Я переопределяю политику DNS модуля, так как сталкиваюсь с issue с /etc/resolv.conf модуля по умолчанию. Другая проблема заключается в том, что модуль не может подключиться к серверу SMTP-сервера из-за /etc/resolv.conf модуля по умолчанию.

Следовательно, 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 должен быть IP-адресом узла, на котором развертывается модуль. Поскольку у меня есть три рабочих узла, я не могу жестко закодировать значение для IP-адреса конкретного рабочего узла. Я бы не предпочел настроить модуль для развертывания на определенном узле, поскольку, если ресурсов недостаточно для развертывания модуля на определенном узле, модуль может оставаться в состоянии ожидания.

Как я могу заставить nameservers получить значение IP-адреса узла, на котором развертывается модуль?

Или можно обновить nameservers каким-то общим аргументом, чтобы модуль мог подключаться к smtp-серверу.


person Rakesh Kotian    schedule 11.10.2020    source источник


Ответы (1)


dnsConfig поддерживает до 3 IP-адресов указано так, что теоретически вы можете жестко закодировать его в поле nameservers. Однако в качестве обходного пути вы можете передать IP-адрес узла как переменная env, а затем передать ее модулю. Пример:

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 берет IP-адрес узла, на котором развернут модуль, и сохраняет его как переменную среды. Затем он записывается в /etc/resolv.conf.

person Mariusz K.    schedule 12.10.2020
comment
Вау, спасибо за решение. Как только я обновлю вышеуказанные изменения, я получаю сообщение об ошибке: /bin/sh: can't create /etc/resolv.conf: Permission denied. Я использую изображение grafana:7.1.5, которое имеет securityContext fsGroup и runAsUser как 472. - person Rakesh Kotian; 14.10.2020
comment
Чтобы запустить модуль от имени пользователя root, я попытался обновить securityContext runAsUser: 0, но, к сожалению, модуль Grafana выходит из строя с этим изменением. - person Rakesh Kotian; 14.10.2020
comment
Вы можете создать политику безопасности модуля и запустить privileged модуль kubernetes.io/ docs/concepts/policy/pod-security-policy/ - person Mariusz K.; 14.10.2020