首页 > 解决方案 > 使用服务的外部 IP 作为部署的环境变量

问题描述

是否可以将服务的外部 IP(NodePort 或 LoadBalancer)作为环境变量传递给不同服务部署中的容器?

举一个具体的例子,考虑一个 Kubernetes 集群,它有多个队友的命名空间,所以他们每个人都有自己的测试环境。在单一环境中,至少有两个服务:

  1. API 网关服务,用于将流量路由到其他服务
  2. 可以向环境注册 DNS 条目的服务

对于服务 #2,它需要知道服务 #1 的外部 IP 地址。到目前为止,我只能找到kubectl用于描述服务 #1 的示例来查找此信息。我希望有可能做这样的事情:

apiVersion: v1
kind: Service
metadata:
  name: gateway
  namespace: "${ env }"
  labels:
    app: gateway
spec:
  type: LoadBalancer
  ports:
     - port: 8080
  selector:
    app: gateway

apiVersion: extensions/v1
kind: Deployment
metadata:
  name: svc2-deployment
  namespace: "${ env }"
  labels:
    app: svc2
spec:
  template:
    metadata:
      labels:
        app: svc2
    spec:
      containers:
        - name: app
          env:
            - name: GATEWAY_IP
              valueFrom:
                fieldRef:
                  fieldPath: service.gateway.----.ingressIp

而不是将 say aninitContainers与执行操作的脚本一起使用kubectl。特别是因为我对 Kubernetes 很陌生 :)

标签: kubernetes

解决方案


不是真的,但您可以为此使用DNS。例如:

apiVersion: extensions/v1
kind: Deployment
metadata:
  name: svc2-deployment
  namespace: "${ env }"
  labels:
    app: svc2
spec:
  template:
    metadata:
      labels:
        app: svc2
    spec:
      containers:
        - name: app
          env:
            - name: GATEWAY_IP
              value: gateway.<namespace-where-gw-is-running>.svc.cluster.local

推荐阅读