将LoadBalancer的ExternalIP分配给Deployment作为ENV变量

时间:2019-12-10 09:12:18

标签: kubernetes google-kubernetes-engine kubernetes-helm

我的Pod应该通过ExternalIP访问另一个LoadBalancer服务时,情况非常特殊。

是否可以将LoadBalancer ExternalIP作为ENV变量分配给Deployment.yaml?

提前谢谢!

2 个答案:

答案 0 :(得分:1)

我认为这在任何标准模板工具中都不是直接可行的。问题的一部分是,创建云托管的负载均衡器是异步操作,因此,外部IP值要等到kubectl apply(或等效的helm install)完成之后的一段时间才能使用

如果可以提前创建服务,则可以将其外部IP地址或主机名硬编码为其他配置,但这本质上是两个步骤。 (如果您购买了Kubernetes运营商,那么应该可以使用自定义代码:监视服务,并在获得其外部地址后,创建一个保存该地址的相应ConfigMap。)

根据您的特定用例,也可以将集群中的LoadBalancer服务作为目标,就像其他任何服务一样。这不会在云提供商的负载均衡器层中解决,但应该否则无法区分。

答案 1 :(得分:0)

我找到了方法,但是@David Maze完全正确-没有直接方法。

因此,我的解决方案是添加具有公共区域和私有区域的DNS:

apiVersion: v1
kind: Service
metadata:
  name: nginx-lb
  labels:
    app.kubernetes.io/name: nginx-lb
  annotations:
    external-dns.alpha.kubernetes.io/hostname: mycoolservice.{{ .Values.dns_external_zone }}.
    external-dns.alpha.kubernetes.io/zone-type: public,private
    external-dns.alpha.kubernetes.io/ttl: "1"
spec:
  type: LoadBalancer
  ports:
    - name: https
      port: 443
      targetPort: https
    - name: http
      port: 80
      targetPort: http
  selector:
    app.kubernetes.io/name: nginx