Есть ли способ прочитать hostAliases из значений с configmap в Kubernetes? - PullRequest
0 голосов
/ 16 октября 2019

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

deployment.yaml ... hostAliases: valueFrom: configMapKeyRef: name: host-aliases-configuration key: hostaliases </p> <p>configmap.yaml kind: ConfigMap metadata: name: host-aliases-configuration data: hostaliases: | {{ .Values.hosts }}</p> <p>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: декодировать фрагмент: ожидаем [или n, но найден {, обнаружена ошибка в # 10 байт ... | псевдонимов ": {" valueFrom | ...,больший контекст ... | config "," name ":" config-volume "}]}]," hostAliases ": {" valueFrom ": {" configMapKeyRef ": {" key ":" hostaliases | ...

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

Ответы [ 2 ]

1 голос
/ 16 октября 2019

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

Решение, которое я наконец-то придумал, состояло в том, чтобы создать диаграмму 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 }}
0 голосов
/ 17 октября 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 могут быть доступны для этих внешних IP-адресов. Трафик, который поступает в кластер с внешним IP-адресом (в качестве IP-адреса назначения) через порт службы, будет направляться на одну из конечных точек службы. externalIPs не управляются Kubernetes и находятся в ведении администратора кластера.

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

...