首页 > 解决方案 > 有什么方法可以在 Kubernetes 中使用 configmap 从值中读取 hostAliases?

问题描述

我想知道是否有任何方法可以外部化我的 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"

这不起作用:

掌舵安装 --name 网关。

错误:发布网关失败:版本“v1”中的部署不能作为部署处理:v1.Deployment.Spec:v1.DeploymentSpec.Template:v1.PodTemplateSpec.Spec:v1.PodSpec.HostAliases:[]v1.HostAlias:解码切片:期望 [ 或 n,但发现 {,在 ...|Aliases 的 #10 字节中发现错误:{“valueFrom|...,更大的上下文 ...|config”,“name”:“config-volume "}]}],"hostAliases":{"valueFrom":{"configMapKeyRef":{"key":"hostaliases|...

我想知道是否有任何方法可以通过 env 将这些 url 外部化,也许可以使用另一种方法。

标签: kuberneteshostsconfigmap

解决方案


我有同样的问题。

我最终想出的解决方案是创建一个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 }}

推荐阅读