在 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 上设置它应该可以解决您的问题,但这可能不是最好的做法,因为它可能由于某种原因被弃用了。
每当在集群中创建一个新 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 上设置它应该可以解决您的问题,但这可能不是最好的做法,因为它可能由于某种原因被弃用了。