Итак, я развертываю свой стек приложений на диаграммах kubernetes sing helm, и теперь мне нужно добавить некоторые зависимые IP-адреса серверов и имена хостов в файл /etc/hosts моих модулей, поэтому мне нужна помощь в этом сценарии.
Как указано в документации, вы можете добавить дополнительные хосты в POD, используя функцию псевдонимы хостов.
Пример из документов:
apiVersion: v1
kind: Pod
metadata:
name: hostaliases-pod
spec:
restartPolicy: Never
hostAliases:
- ip: "127.0.0.1"
hostnames:
- "foo.local"
- "bar.local"
- ip: "10.1.2.3"
hostnames:
- "foo.remote"
- "bar.remote"
containers:
- name: cat-hosts
image: busybox
command:
- cat
args:
- "/etc/hosts"
Kubernetes предоставляет DNS-сервис, который могут использовать все модули. В свою очередь, вы можете определить Служба внешнего имени, который просто определяет запись DNS. Как только вы это сделаете, ваши модули смогут общаться с этой службой так же, как с любой другой службой Kubernetes, и подключаться к любому серверу.
Вы можете развернуть набор служб ExternalName глобально. Вы можете сделать это и на диаграмме Helm, если хотите, что-то вроде
apiVersion: v1
kind: Service
metadata:
name: {{ .Release.Name }}-{{ .Chart.Name }}-foo
spec:
type: ExternalName
externalName: {{ .Values.fooHostname }}
Практика, которую я усвоил, заключается в том, что вам следует избегать использования /etc/hosts
, если это вообще возможно.
Шаблонное решение исходного вопроса. Я тестировал это с helm 3.
apiVersion: apps/v1
kind: Deployment
spec:
template:
spec:
{{- with .Values.hostAliases }}
hostAliases:
{{ toYaml . | indent 8 }}
{{- end }}
Для таких значений, как:
hostAliases:
- ip: "10.0.0.1"
hostnames:
- "host.domain.com"
Если hostAliases опущен или закомментирован в значениях, раздел hostAliases опускается при отображении шаблона.
Это решение создаст неправильный формат в первом элементе списка. Следующий код работает у меня на helm v3.5.0
hostAliases: {{- .Values.hostAliases | toYaml | nindent 8 }}