有什么方法可以在Kubernetes中使用configmap从值读取hostAliases?

问题描述 投票:0回答:2

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

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

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

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

这不起作用:

helm install --name网关。

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

我想知道是否可以通过另一种方法通过env外部化此URL。

kubernetes hosts configmap
2个回答
0
投票

我有同样的问题。

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

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

由于文件的托管性质,如果在容器重新启动或重新安排Pod的情况下,当Kubelet重新安装主机文件时,任何用户编写的内容都将被覆盖。因此,不建议修改文件的内容

请参阅HostAliases

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

2。不清楚您要做什么。

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

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

希望获得帮助

© www.soinside.com 2019 - 2024. All rights reserved.