Есть ли способ прочитать hostAliases из значений с configmap в Kubernetes?

Я хотел бы знать, есть ли способ экстернализовать мои hostaliases, чтобы читать из файла значений в зависимости от среды.

deployment.yaml ... hostAliases: valueFrom: configMapKeyRef: name: host-aliases-configuration key: hostaliases

configmap.yaml kind: ConfigMap metadata: name: host-aliases-configuration data: hostaliases: | {{ .Values.hosts }}

values.yaml hosts: - ip: "13.21.219.253" hostnames: - "test-test.com" - ip: "13.71.225.255" hostnames: - "test-test.net"

Вот и вся работа:

helm install --name gateway.

Ошибка: сбой шлюза выпуска: развертывание в версии «v1» нельзя обрабатывать как развертывание: v1.Deployment.Spec: v1.DeploymentSpec.Template: v1.PodTemplateSpec.Spec: v1.PodSpec.HostAliases: [] v1.HostAlias: decode slice: expect [или n, но найдено {, ошибка найдена в # 10 байте ... | Псевдонимы ": {" valueFrom | ..., больший контекст ... | config "," name ":" config-volume "}]}]," hostAliases ": {" valueFrom ": {" configMapKeyRef ": {" key ":" hostaliases | ...

Я хотел бы знать, есть ли способ экстернализовать эти URL-адреса с помощью env, возможно, используя другой подход.


person Bruno Macedo    schedule 16.10.2019    source источник
comment
Я предлагаю прочитать DNS для служб и модулей и обсуждение сервисов ExternalName в документации Kubernetes; Вероятно, у вашего облачного провайдера или хостинговой среды есть DNS-сервис, который вы также можете использовать (например, AWS Route 53). Распространение большого количества ручных записей хоста обычно не является лучшей практикой.   -  person David Maze    schedule 17.10.2019


Ответы (2)


У меня такая же проблема.

решение, которое я наконец придумал, заключалось в создании external-hosts диаграммы, которая будет включать все мои внешние IP-адреса (абстрагированные как службы clusterIP), и включить эту диаграмму в requirements.yaml каждой диаграммы.

requirements.yaml каждого графика:

dependencies:

- name: external-hosts
  version: "0.1.*"
  repository: "file://../external-hosts"

сама external-hosts диаграмма содержала:

values.yaml: список хостов + нужные порты:

headless:
- host: test-test.com
  ip: "13.21.219.253"
  ports:
  - 80
  - 443
- host: test-test.net
  ip: "13.71.225.255"
  ports:
  - 3306

templates/headless.yaml - создает для каждого хоста службу clusterIP с одной конечной точкой. немного ошеломляюще, но это просто работает.

{{ range .Values.headless }}
---
kind: Service
apiVersion: v1
metadata:
 name: {{ .host }}
 labels:
{{ include "external-hosts.labels" $ | indent 4 }}
spec:
 ports:
 {{ range .ports }}
 - name: {{ . | quote }}
   port: {{ . }}
   targetPort: {{ . }}
{{ end }}
{{ end }}
---

{{ range .Values.headless }}
---
kind: Endpoints
apiVersion: v1
metadata:
 name: {{ .host }}
 labels:
{{ include "external-hosts.labels" $ | indent 4 }}
subsets:
 - addresses:
     - ip: {{ .ip }}
   ports:
   {{ range .ports }}
     - name: {{ . | quote}}
       port: {{ . }}
  {{ end }}
  {{ end }}
person Efrat Levitan    schedule 16.10.2019

По основному вопросу вы получили сообщение об ошибке, в то время как configMapKeyRef ожидает параметры ключ-значение вместо массива, предоставленного configmap.

1. Вы можете попробовать:

deployment.yaml
...
 hostAliases:
{{ toYaml .Values.hosts | indent 4 }}  

values.yaml
hosts:
  - ip: "13.21.219.253"
    hostnames:
    - "test-test.com"
  - ip: "13.71.225.255"
    hostnames:
    - "test-test.net"

Примечание - hostAliases:

Из-за управляемой природы файла любое содержимое, написанное пользователем, будет перезаписано всякий раз, когда Kubelet перемонтирует файл hosts в случае перезапуска контейнера или перепланирования Pod. Таким образом, не рекомендуется изменять содержимое файла.

См. HostAliases

Кроме того, эти адресаты будут использоваться только с уровня POD.

2. Непонятно, что вы пытаетесь сделать.

Взгляните на внешние IP-адреса это нужно делать на уровне обслуживания.

Если есть внешние IP-адреса, которые маршрутизируются на один или несколько узлов кластера, Kubernetes Services могут быть доступны на этих внешних IP-адресах. Трафик, входящий в кластер с внешним IP-адресом (в качестве IP-адреса назначения) на служебном порте, будет перенаправлен на одну из конечных точек службы. Внешние IP-адреса не управляются Kubernetes и находятся в ведении администратора кластера.

надеюсь, что это поможет

person Mark    schedule 17.10.2019