使用 Pod 环境变量连接到 Pod

using Pod environment variable to connect to pod

在我的 AKS 集群中,我有 2 个服务(API 和 Redis 数据库)。我想从 API pod 连接到 Redis 数据库。

我使用 kubectl exec redis-pod -- printenv 获得了 Redis 环境,主机变量是 REDIS_SERVICE_HOST,是否可以将此环境注入到 API 部署中?

我试过类似的方法,但没有用:

env:
   - name: REDIS_HOST
     value: ${REDIS_SERVICE_HOST}:6379

您可以将 redis 主机 IP 存储在 configMap 中并将其用作环境

  export REDISHOST_IP=XXX.XXX.XXX.XXX
  kubectl create configmap redishost --from-literal=REDISHOST=${REDISHOST_IP}

env:
- name: REDISHOST
  valueFrom:
    configMapKeyRef:
      name: redishost
      key: REDISHOST

更好的方法是使用 kubernetes 服务来公开 redis

apiVersion: v1
kind: Service
metadata:
  name: redis
  namespace: default
  labels:
    app: redis
  ports:
  - port: 6379
    targetPort: 6379
  selector:
    app: redis

注意:在此示例中,redis pod 需要具有标签 app: redis

然后使用 env.

redis.default.svc.cluster.local 作为 redis 主机注入其他 pods

您还使用 configMap 存储 redis.default.svc.cluster.local 并将其用作环境。

kubectl create configmap redishost --from-literal=REDISHOST=redis.default.svc.cluster.local

env:
- name: REDISHOST
  valueFrom:
    configMapKeyRef:
      name: redishost
      key: REDISHOST

这样即使 redis pod 重新启动并且 pod IP 发生变化,其他 pods 连接到 redis 也不会受到影响,也不需要更改。