跳到主要内容

环境变量

2024年11月19日
柏拉文
越努力,越幸运

一、认识


Kubernetes 中,Service 环境变量是一种机制,允许 Pod 使用服务的基本信息(如服务的 IP 和端口)作为环境变量。这种方式为应用程序提供了一种简单的方法来发现和访问服务,而无需手动配置这些信息。

二、规则


Service 环境变量的生成规则: 当 Kubernetes 中的一个 Service 创建后,集群内所有 Pod 都会自动获取该 Service 的相关环境变量。以下是生成规则:

  1. 命名规则:

    • 环境变量名称由 Service 名称转化为全大写字母,并将非法字符(如 -.)替换为 _。例:my-serviceMY_SERVICE
  2. 包含的信息

    • SERVICE_HOSTServiceClusterIP

    • SERVICE_PORTService 暴露的端口号。

    • 如果 Service 暴露了多个端口,则每个端口都会生成独立的环境变量。

三、生成


3.1 创建 Service

注意: 注意,环境变量仅在 Pod 启动时注入。因此,必须先创建 Service, 然后创建 Deployment.

apiVersion: v1
kind: Service
metadata:
name: test-service
spec:
selector:
app: test-nginx
type: NodePort
ports:
- protocol: TCP
port: 80
targetPort: 80
nodePort: 30000
kubectl apply -f test-service.yaml

3.2 创建 Deployment

apiVersion: apps/v1
kind: Deployment
metadata:
name: test-deployment
spec:
replicas: 3
selector:
matchLabels:
app: test-nginx
template:
metadata:
labels:
app: test-nginx
spec:
containers:
- name: test-nginx
image: registry.cn-hangzhou.aliyuncs.com/bolawen/nginx:1.27.1-perl-linux-arm64
ports:
- containerPort: 80
kubectl apply -f test-deployment.yaml

3.3 查看环境变量

kubectl get pods // 查看 Pod Name 

kubectl exec -it <POD_NAME> -- /bin/bash 或者 sh // 进入 Pod
env | grep TEST_SERVICE 

// 或者

printenv | grep TEST_SERVICE

示例输出

TEST_SERVICE_SERVICE_HOST=10.96.0.2
TEST_SERVICE_SERVICE_PORT=8080
TEST_SERVICE_PORT=tcp://10.96.0.2:8080
TEST_SERVICE_PORT_8080_TCP_PORT=8080

四、问题


4.1 环境变量注入问题

环境变量不会动态更新。如果 Service 的配置发生变化,必须重启 Pod