一个 Kubernetes Mutating Webhook,用于根据 Pod 标签自动注入环境变量和其他配置。
- 基于 Pod 标签选择性注入环境变量
- 支持配置 DNS 选项
- 支持配置节点亲和性
- 支持配置容忍度
- 支持配置拓扑分布约束
# 部署(创建新集群或使用现有集群)
make deploy
# 运行测试
make test
# 部署并测试
make test-all
# 清理资源
make clean
git clone https://github.com/your-username/k8s-env-injector.git
cd k8s-env-injector
kubectl api-versions | grep admissionregistration.k8s.io/v1
# 输出应该包含
admissionregistration.k8s.io/v1
kind create cluster --name env-injector
kubectl create namespace injector
cd image && docker build -t k8s-env-injector:dev .
# 检查镜像
docker images | grep k8s-env-injector
kind load docker-image k8s-env-injector:dev --name env-injector
cd ../deployment
./webhook-create-signed-cert.sh \
--service env-injector-webhook-svc \
--secret env-injector-webhook-certs \
--namespace injector
cat mutatingwebhook.yaml | ./webhook-patch-ca-bundle.sh > mutatingwebhook-ca-bundle.yaml
kubectl create -f configmap.yaml -n injector
kubectl create -f deployment.yaml -n injector
kubectl create -f service.yaml -n injector
kubectl create -f mutatingwebhook-ca-bundle.yaml
kubectl get pods -n injector
# 输出应该类似
NAME READY STATUS RESTARTS AGE
env-injector-webhook-deployment-xxxxxx-xxxxx 1/1 Running 0 6s
需要同时满足以下标签才会注入环境变量:
inject-env: "true"
app-type
为 "web" 或 "api"
命名空间需要添加标签:
wh/envInjector: enabled
通过 ConfigMap 配置要注入的环境变量:
env:
- name: INJECTOR_TEST
value: enabled
同样操作,这里省略
# 使用默认命名空间
./bin/test.sh
# 指定命名空间
./bin/test.sh -n custom-namespace
- 正确标签的 Pod:应该注入环境变量
- 无标签的 Pod:不应该注入环境变量
- 错误类型的 Pod:不应该注入环境变量