首页 > 解决方案 > Kubernetes 是否将所有服务共享为环境变量的功能?

问题描述

我在 kubernetes 上设置了 laravel 和 socketcluster 安装,当尝试将 redis 添加到 laravel 时,得到一个关于我没有定义的 env 变量的错误,所以当我在任何容器中打印所有 env 变量时,我得到了所有变量从其他这样的服务:

SCC_STATE_PORT_7777_TCP_PORT=7777
KUBERNETES_SERVICE_PORT=443
PHP_PORT_9000_TCP_ADDR=10.35.246.141
SOCKETCLUSTER_SERVICE_PORT=8000
RDB_SERVICE_PORT_DB=28015
REDIS_SERVICE_PORT=6379
SCC_BROKER_PORT_8888_TCP_PROTO=tcp
MARIADB_PORT_3306_TCP=tcp://10.35.247.244:3306
KUBERNETES_PORT_443_TCP_PORT=443
RDB_SERVICE_PORT_WEB=8080
RDB_PORT=tcp://10.35.250.91:28015
RDB_PORT_28015_TCP=tcp://10.35.250.91:28015
KUBERNETES_SERVICE_HOST=10.35.240.1
NGINX_PORT_80_TCP_PORT=80
PHP_SERVICE_PORT=9000
RDB_SERVICE_PORT=28015
RDB_PORT_8080_TCP_ADDR=10.35.250.91
SCC_STATE_PORT_7777_TCP_ADDR=10.35.254.120
SOCKETCLUSTER_PORT=tcp://10.35.244.112:8000
RDB_PORT_28015_TCP_ADDR=10.35.250.91
PHP_PORT=tcp://10.35.246.141:9000
PHP_PORT_9000_TCP=tcp://10.35.246.141:9000
RDB_PORT_28015_TCP_PROTO=tcp
REDIS_PORT_6379_TCP_ADDR=10.35.254.59
MARIADB_PORT_3306_TCP_PORT=3306
SCC_STATE_PORT_7777_TCP_PROTO=tcp
MARIADB_SERVICE_PORT=3306
PHP_SERVICE_HOST=10.35.246.141
PHP_PORT_9000_TCP_PROTO=tcp
RDB_PORT_8080_TCP=tcp://10.35.250.91:8080
RDB_PORT_8080_TCP_PROTO=tcp
REDIS_PORT_6379_TCP_PROTO=tcp
MARIADB_PORT_3306_TCP_ADDR=10.35.247.244
KUBERNETES_PORT_443_TCP_ADDR=10.35.240.1
NGINX_PORT_80_TCP_ADDR=10.35.247.125
REDIS_SERVICE_HOST=10.35.254.59
SCC_BROKER_SERVICE_HOST=10.35.243.129
SCC_STATE_PORT_7777_TCP=tcp://10.35.254.120:7777
NGINX_PORT=tcp://10.35.247.125:80
SOCKETCLUSTER_PORT_8000_TCP_PROTO=tcp
SCC_STATE_SERVICE_PORT=7777
SCC_STATE_PORT=tcp://10.35.254.120:7777
NGINX_PORT_80_TCP_PROTO=tcp
SOCKETCLUSTER_PORT_8000_TCP=tcp://10.35.244.112:8000
RDB_SERVICE_HOST=10.35.250.91
NGINX_SERVICE_PORT_DB=80
MARIADB_PORT_3306_TCP_PROTO=tcp
PHP_PORT_9000_TCP_PORT=9000
SOCKETCLUSTER_PORT_8000_TCP_PORT=8000
SOCKETCLUSTER_PORT_8000_TCP_ADDR=10.35.244.112
REDIS_PORT_6379_TCP=tcp://10.35.254.59:6379
NGINX_PORT_80_TCP=tcp://10.35.247.125:80
SCC_BROKER_PORT_8888_TCP=tcp://10.35.243.129:8888
KUBERNETES_PORT=tcp://10.35.240.1:443
NGINX_SERVICE_PORT=80
RDB_PORT_28015_TCP_PORT=28015
RDB_PORT_8080_TCP_PORT=8080
SCC_BROKER_SERVICE_PORT=8888
SCC_STATE_SERVICE_HOST=10.35.254.120
MARIADB_SERVICE_HOST=10.35.247.244
KUBERNETES_SERVICE_PORT_HTTPS=443
REDIS_PORT=tcp://10.35.254.59:6379
REDIS_PORT_6379_TCP_PORT=6379
SCC_BROKER_PORT=tcp://10.35.243.129:8888
NGINX_SERVICE_HOST=10.35.247.125
SCC_BROKER_PORT_8888_TCP_PORT=8888
MARIADB_PORT=tcp://10.35.247.244:3306
KUBERNETES_PORT_443_TCP_PROTO=tcp
SOCKETCLUSTER_SERVICE_HOST=10.35.244.112
SCC_BROKER_PORT_8888_TCP_ADDR=10.35.243.129
KUBERNETES_PORT_443_TCP=tcp://10.35.240.1:443

当我有这个部署时: gke

知道这是一个功能,错过配置还是什么?更新:或者如果我可以禁用它?

标签: kubernetescontainers

解决方案


这是一个特点。 对于同一命名空间中的每个服务,您可以获得环境变量,OTHERSVC_SERVICE_HOST以及OTHERSVC_SERVICE_PORT来自旧版 Docker 链接功能的其他一些变量。我不知道有什么方法可以关闭这些。

其实在实际中使用这些是有问题的,因为它依赖于生产服务启动后启动的消费pod,这很难保证;DNS 查找othersvc.default.svc.cluster.local可能无法在运行时解析,但不会缺少环境变量。相反,如果您可能使用名为MICRO_SERVICE_HOSTor的环境变量配置您的 pod DATABASE_PORT,则这些名称很可能被生成的环境变量“踩到”。


推荐阅读