【发布时间】:2020-06-22 22:40:18
【问题描述】:
所以我在 kubernetes sing helm 图表上部署我的应用程序堆栈,现在我需要在我的 pods /etc/hosts 文件中添加一些依赖的服务器 ip 和主机名,所以在这种情况下需要帮助
【问题讨论】:
标签: kubernetes kubernetes-helm
所以我在 kubernetes sing helm 图表上部署我的应用程序堆栈,现在我需要在我的 pods /etc/hosts 文件中添加一些依赖的服务器 ip 和主机名,所以在这种情况下需要帮助
【问题讨论】:
标签: kubernetes kubernetes-helm
原始问题的 helm 模板化解决方案。我用 helm 3 对此进行了测试。
apiVersion: apps/v1
kind: Deployment
spec:
template:
spec:
{{- with .Values.hostAliases }}
hostAliases:
{{ toYaml . | indent 8 }}
{{- end }}
对于诸如以下的值:
hostAliases:
- ip: "10.0.0.1"
hostnames:
- "host.domain.com"
如果在值中省略或注释了 hostAliases,则在呈现模板时省略 hostAliases 部分。
【讨论】:
hostAliases: {{- .Values.hostAliases | toYaml | nindent 8 }}
在文档中,您可以使用 host aliases 功能向 POD 添加额外的主机
来自文档的示例:
apiVersion: v1
kind: Pod
metadata:
name: hostaliases-pod
spec:
restartPolicy: Never
hostAliases:
- ip: "127.0.0.1"
hostnames:
- "foo.local"
- "bar.local"
- ip: "10.1.2.3"
hostnames:
- "foo.remote"
- "bar.remote"
containers:
- name: cat-hosts
image: busybox
command:
- cat
args:
- "/etc/hosts"
【讨论】:
Kubernetes 提供了一个 DNS service 供所有 pod 使用。反过来,您可以定义一个仅定义 DNS 记录的ExternalName service。一旦你这样做了,你的 pod 就可以像与任何其他 Kubernetes 服务一样与该服务通信,并到达任何服务器。
您可以在全球范围内部署一组 ExternalName 服务。如果需要,您也可以在 Helm 图表中执行此操作,例如
apiVersion: v1
kind: Service
metadata:
name: {{ .Release.Name }}-{{ .Chart.Name }}-foo
spec:
type: ExternalName
externalName: {{ .Values.fooHostname }}
我学到的做法是尽可能避免使用/etc/hosts。
【讨论】: