1

我想知道是否有任何方法可以外部化我的 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 外部化,也许可以使用另一种方法。

4

2 回答 2

3

我有同样的问题。

我最终想出的解决方案是创建一个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 }}
于 2019-10-16T20:06:04.420 回答
2

对于主要问题,当 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"

注意 - 主机别名:

由于文件的托管性质,在容器重启或 Pod 重新调度的情况下,只要 Kubelet 重新挂载 hosts 文件,任何用户编写的内容都将被覆盖。因此,不建议修改文件的内容

请参考主机别名

此外,这些收件人将仅从 POD 级别使用。

2.不清楚你想做什么。

看看应该在服务级别完成的外部 IP 。

如果有路由到一个或多个集群节点的外部 IP,Kubernetes 服务可以暴露在这些外部 IP 上。在服务端口上使用外部 IP(作为目标 IP)进入集群的流量将被路由到服务端点之一。externalIP 不由 Kubernetes 管理,由集群管理员负责。

希望这有帮助

于 2019-10-17T16:09:28.593 回答