Службам Alibaba Cloud k8s иногда не удается получить разрешение DNS и установить ACK NodeLocal DNSCache.

1. Фоновое
feign.RetryableException: нет маршрута к хосту (хост недоступен), выполняется POST http://osale- Thirdparty/empty/detect
Служба внезапно прерывается. Когда разработчик просматривает журнал, хост не найден. Alibaba Cloud Технология рекомендует установить компонент кэширования DNS, добавление этого компонента решит эту проблему. Эта проблема обычно возникает из-за колебаний сети. См. документ https://help.aliyun.com/zh/ack/ack-managed-and-ack-dedicated/user-guide/configure-nodelocal-dnscache?spm= a2c4g .11186623.0.0.210c10baNQdY3T

2. Этапы работы
Способ 1: Настройте DNSConfig для автоматического внедрения
DNSConfig. Контроллер динамического внедрения можно использовать для автоматического внедрения DNSConfig во вновь создаваемые модули Pod, что позволяет избежать необходимости вручную настраивать YAML модуля для внедрения. По умолчанию это приложение будет прослушивать запросы новых модулей Pod в пространстве имен, содержащем метку node-local-dns-injection=enabled. Вы можете пометить пространство имен с помощью следующей команды.

kubectl label namespace default node-local-dns-injection=enabled
kubectl label namespace yxyw node-local-dns-injection=enabled
kubectl label namespace yxyw-uat node-local-dns-injection=enabled
kubectl get ns --show-labels
kubectl get pods -o yaml osale-open-api-69f856757f-ngqgb -n yxyw-uat

Примечание.
Приведенная выше команда включит автоматическое внедрение только пространства имен по умолчанию. Если вам нужно включить автоматическое внедрение для других пространств имен, вам необходимо заменить default именем целевого пространства имен.

Если автоматическое внедрение DNSConfig в пространство имен включено, и если вам необходимо исключить некоторые поды (то есть не выполнять внедрение), вы можете настроить поле «Метки» в шаблоне пода и добавить метку node-local-dns-injection=disabled.

ECI не поддерживает NodeLocal DNSCache. Когда развертывание динамически и эластично расширяется до узла ECI, модуль на ECI приведет к тайм-ауту разрешения доменного имени из-за невозможности подключения к NodeLocal DNSCache. В это время все развертывание должно быть внедрено с исключением. Вы может настроить поле метки Labels в своем шаблоне модуля и добавить node-local-dns-injection=disabled.
После включения автоматического внедрения в создаваемый вами модуль будут добавлены следующие поля: Чтобы обеспечить максимальную доступность бизнес-запросов DNS, IP-адрес кластера kube-dns будет добавлен к серверам имен в качестве резервный DNS-сервер.

dnsConfig:
    nameservers:
    - 169.254.20.10
    - 172.21.0.10
    options:
    - name: ndots
      value: "3"
    - name: attempts
      value: "2"
    - name: timeout
      value: "1"
    searches:
    - default.svc.cluster.local
    - svc.cluster.local
    - cluster.local
  dnsPolicy: None

Pod будет автоматически добавлен в кэш DNS при одновременном выполнении следующих условий. Если ваш контейнер Pod не вводит IP-адрес DNS-кэш-сервера, проверьте, не соответствует ли Pod следующим условиям.

Новый под не находится в пространствах имен kube-system и kube-public.

Метка Labels пространства имен, в котором расположен новый под, содержит node-local-dns-injection=enabled.

Метки в пространстве имен, где расположен новый модуль Pod, не содержат меток, связанных с модулем ECI, таких как virtual-node-affinity-injection, eci, Alibabacloud.com/eci и т. д.

Вновь созданный модуль не помечен метками, связанными с ECI, такими как eci, Alibabacloud.com/eci и т. д., или помечен меткой node-local-dns-injection=disabled для отключения внедрения DNS.

Сеть вновь созданного модуля — hostNetwork, а DNSPolicy — ClusterFirstWithHostNet, или модуль — не-hostNetwork, а DNSPolicy — ClusterFirst.
Обратите внимание, что проверка успешности внедрения зависит от yaml модуля, поскольку dnsconfig внедряется непосредственно в модуль.
3. Если у некоторых служб есть особые требования к конфигурации DNS, они будут перезаписаны, поэтому вам необходимо их настроить, отключить кэш DNS конфигурации и отметьте отключить DNS.

apiVersion: apps/v1
kind: Deployment  
metadata:  
  name: @APP_NAME@
  labels:  
    app: @APP_NAME@
spec:  
  replicas: @REPLICAS@
  revisionHistoryLimit: 10
  selector:  
    matchLabels:  
      app: @APP_NAME@
  template:  
    metadata:  
      labels:  
        app: @APP_NAME@
        armsPilotAutoEnable: "on"
        armsPilotCreateAppName: @APP_NAME@
        one-agent.jdk.version: "OpenJDK11"
        node-local-dns-injection: "disabled"

Supongo que te gusta

Origin blog.csdn.net/jialiu111111/article/details/132823833
Recomendado
Clasificación