【问题标题】:There is any way to read a hostAliases from values with configmap in Kubernetes?有什么方法可以在 Kubernetes 中使用 configmap 从值中读取 hostAliases?
【发布时间】:2019-10-16 14:44:31
【问题描述】:

我想知道是否有任何方法可以外部化我的主机别名以便从值文件中读取以因环境而异。

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

configmap.yaml 种类:ConfigMap 元数据: 名称:主机别名配置 数据: 敌意:| {{ .Values.hosts }}

values.yaml 主持人: - ip:“13.21.219.253” 主机名: - “test-test.com” - ip:“13.71.225.255” 主机名: - “test-test.net”

这不起作用:

helm install --name gateway.

错误:发布网关失败:版本“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 外部化,也许可以使用另一种方法。

【问题讨论】:

  • 我建议阅读 Kubernetes 文档中的DNS for Services and PodsExternalName services 的讨论;您的云提供商或托管环境可能也有您可以使用的 DNS 服务(例如:AWS Route 53)。传播大量手动主机条目通常不是最佳做法。

标签: kubernetes hosts configmap


【解决方案1】:

我遇到了同样的问题。

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

【讨论】:

    【解决方案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 文件,任何用户编写的内容都将被覆盖。因此,不建议修改文件内容

    请参考HostAliases

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

    2.不清楚您要做什么。

    看看external IPs应该是在服务级别完成的。

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

    希望有帮助

    【讨论】:

      猜你喜欢
      • 2021-03-25
      • 1970-01-01
      • 1970-01-01
      • 2019-08-11
      • 2018-05-21
      • 2019-07-08
      • 1970-01-01
      • 1970-01-01
      • 2020-12-16
      相关资源
      最近更新 更多