环境变量
2024年11月19日
一、认识
在 Kubernetes
中,Service
环境变量是一种机制,允许 Pod
使用服务的基本信息(如服务的 IP
和端口)作为环境变量。这种方式为应用程序提供了一种简单的方法来发现和访问服务,而无需手动配置这些信息。
二、规则
Service
环境变量的生成规则: 当 Kubernetes
中的一个 Service
创建后,集群内所有 Pod
都会自动获取该 Service
的相关环境变量。以下是生成规则:
-
命名规则:
- 环境变量名称由
Service
名称转化为全大写字母,并将非法字符(如-
和.
)替换为_
。例:my-service
→MY_SERVICE
- 环境变量名称由
-
包含的信息:
-
SERVICE_HOST
:Service
的ClusterIP
。 -
SERVICE_PORT
:Service
暴露的端口号。 -
如果
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
。