#kubernetes
Вопрос:
Я пытаюсь получить доступ к службе, прослушивающей порт, запущенный на каждом узле в моем кластере «голый металл» (Ubuntu 20.04), изнутри модуля. Я могу использовать реальный IP-адрес одного из узлов, и это работает. Однако мне нужны модули для подключения к порту на их собственном узле. Я не могу использовать «127.0.0.1» внутри модуля.
Дополнительная информация: Я пытаюсь объединить множество существующих сервисов в k8s. Мы используем старую версию Consul для обнаружения служб и запускаем ее на каждом узле, предоставляющем DNS на 8600. Я понял, как отредактировать основной файл coredns, чтобы добавить блок consul {}, поэтому поиск .consul работает.
consul {
errors
cache 30
forward . 157.90.123.123:8600
}
Однако мне нужно заменить этот IP-адрес на «адрес узла, на котором работает модуль coredns».
Есть какие-нибудь идеи? Или другие способы решения этой проблемы? Техас.
Комментарии:
1. Вы уже знаете о
fieldRef
ofstatus.hostIP
как о env-var (я думаю, вы также можете смонтировать нисходящий API в качестве тома, если это проще)?2. Техас. Это может сработать. Похоже, что coredns расширит параметры в основном файле: coredns.io/manual/configuration
Ответ №1:
Комментарий от @mdaniel сработал. Техас.
Отредактируйте развертывание coredns. Добавьте это в контейнер после установки объемов:
env:
- name: K8S_NODE_IP
valueFrom:
fieldRef:
fieldPath: status.hostIP
Отредактируйте карту конфигурации coredns. Добавить в нижнюю часть основного файла:
consul {
errors
cache 30
forward . {$K8S_NODE_IP}:8600
}
Проверьте, работает ли DNS
kubectl run tmp-shell --rm -i --tty --image nicolaka/netshoot -- /bin/bash
nslookup myservice.service.consul
nslookup www.google.com
exit