在 pods 上禁用 Kubernetes ClusterIP 服务环境变量

Disable Kubernetes ClusterIP service environment variables on pods

每当在集群中创建一个新 pod 时,与默认 Kubernetes clusterIP 服务相关的环境变量就会被注入其中。

Kubernetes clusterIp 服务 运行:

NAME                        TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)    AGE
kubernetes                  ClusterIP   10.116.0.1     <none>        443/TCP    27d

无论 pod 在哪个命名空间 运行,以下环境变量将始终出现:

KUBERNETES_SERVICE_PORT=443
KUBERNETES_PORT=tcp://10.116.0.1:443
KUBERNETES_PORT_443_TCP_ADDR=10.116.0.1
KUBERNETES_PORT_443_TCP_PORT=443
KUBERNETES_PORT_443_TCP_PROTO=tcp
KUBERNETES_SERVICE_PORT_HTTPS=443
KUBERNETES_PORT_443_TCP=tcp://10.116.0.1:443
KUBERNETES_SERVICE_HOST=10.116.0.1

我正在使用 enableServiceLinks=false 作为一种机制来避免将服务环境变量注入 pods,但它似乎不适用于默认的 Kubernetes clusterIp服务。

部署清单:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: indecision-app-deployment
  labels:
    app: indecision-app
spec:
  selector:
    matchLabels:
      app: indecision-app
  template:
    metadata:
      labels:
        app: indecision-app
    spec:
      enableServiceLinks: false
      containers:
      - name: indecision-app
        image: hleal18/indecision-app:latest
        ports:
        - containerPort: 8080

是否希望enableServiceLinks=false也避免被注入默认的Kubernetes clusterIP服务?

在k8s源代码中你可以找到this comment:

// We always want to add environment variabled for master services
// from the master service namespace, even if enableServiceLinks is false.

the code that adds these environemt variables

if service.Namespace == kl.masterServiceNamespace && masterServices.Has(serviceName) {
    if _, exists := serviceMap[serviceName]; !exists {
        serviceMap[serviceName] = service
}

如您所见,kubelet 添加来自 masterServiceNamespace 的服务,默认为 "default"

再深入一点,我发现有一个标志 --master-service-namespace

--master-service-namespace The namespace from which the kubernetes master services should be injected into pods (default "default") (DEPRECATED: This flag will be removed in a future version.)

现在该标志已被删除,将来可能会被删除。

在每个 kubelet 上设置它应该可以解决您的问题,但这可能不是最好的做法,因为它可能由于某种原因被弃用了。