node.js - 尽管指定了 Kubernetes 部署/服务端口,但连接端口错误
问题描述
解释我要做什么可能需要一段时间,但请耐心等待。
我有一份工作叫questo-server-deployment
(我知道,令人困惑,但这是在不使用 minikube 上的入口的情况下访问部署的唯一方法)
在这里您可以找到上述设置的整个 Kubernetes/Terraform 配置文件
我有 2 个从node.js
应用程序暴露的端点(questo-server-deployment
)我正在使用外部 IP 地址发出请求10.97.189.215
(questo-server-service
如您在第一张图片中所见)
所以我有2个端点:
- 健康 - 只是
200 OK
从node.js
应用程序返回 - 这部分很好地确认节点应用程序按预期工作。 - dynamodb - 它应该能够向
questo-dynamodb-deployment
(pod)发送请求并得到响应,但它不能。
当我打印环境变量时,我得到以下信息:
➜ kubectl -n minikube-local-ns exec questo-server-deployment--1-7ptnz -- printenv
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=questo-server-deployment--1-7ptnz
DB_DOCKER_URL=questo-dynamodb-service
DB_REGION=local
DB_SECRET_ACCESS_KEY=local
DB_TABLE_NAME=Questo
DB_ACCESS_KEY=local
QUESTO_SERVER_SERVICE_PORT_4000_TCP=tcp://10.97.189.215:4000
QUESTO_SERVER_SERVICE_PORT_4000_TCP_PORT=4000
QUESTO_DYNAMODB_SERVICE_SERVICE_PORT=8000
QUESTO_DYNAMODB_SERVICE_PORT_8000_TCP_PROTO=tcp
QUESTO_DYNAMODB_SERVICE_PORT_8000_TCP_PORT=8000
KUBERNETES_SERVICE_HOST=10.96.0.1
KUBERNETES_SERVICE_PORT=443
KUBERNETES_PORT=tcp://10.96.0.1:443
KUBERNETES_PORT_443_TCP_PORT=443
KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1
QUESTO_SERVER_SERVICE_SERVICE_HOST=10.97.189.215
QUESTO_SERVER_SERVICE_PORT=tcp://10.97.189.215:4000
QUESTO_SERVER_SERVICE_PORT_4000_TCP_PROTO=tcp
QUESTO_SERVER_SERVICE_PORT_4000_TCP_ADDR=10.97.189.215
KUBERNETES_PORT_443_TCP_PROTO=tcp
QUESTO_DYNAMODB_SERVICE_PORT_8000_TCP=tcp://10.107.45.125:8000
QUESTO_DYNAMODB_SERVICE_PORT_8000_TCP_ADDR=10.107.45.125
KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443
QUESTO_SERVER_SERVICE_SERVICE_PORT=4000
QUESTO_DYNAMODB_SERVICE_SERVICE_HOST=10.107.45.125
QUESTO_DYNAMODB_SERVICE_PORT=tcp://10.107.45.125:8000
KUBERNETES_SERVICE_PORT_HTTPS=443
NODE_VERSION=12.22.7
YARN_VERSION=1.22.15
HOME=/root
所以看起来配置知道 dynamodb 地址和端口:
QUESTO_DYNAMODB_SERVICE_PORT_8000_TCP=tcp://10.107.45.125:8000
您还会在我指定的上述环境变量中注意到:
DB_DOCKER_URL=questo-dynamodb-service
这应该是questo-dynamodb-service
我在此处(在 configmap 中)分配给配置的 url:port,然后在questo-server-deployment
(job)中使用
另外,当我登录时:
kubectl logs -f questo-server-deployment--1-7ptnz -n minikube-local-ns
我得到以下结果:
这表明应用程序 (node.js) 尝试连接到数据库 (dynamodb) 但在错误的端口上443
而不是8000
?
应该包含完整的DB_DOCKER_URL
地址(带端口)到questo-dynamodb-service
我在这里做错了什么?
编辑 - -
我已按照答案中8000
的建议将端口明确分配给 ,DB_DOCKER_URL
但现在出现以下错误:
在我看来,Kubernetes 中有某种默认行为,它尝试使用https
?
有什么想法需要在这里做什么吗?
解决方案
如何在 ConfigMap 中指定端口:
...
data = {
DB_DOCKER_URL = ${kubernetes_service.questo_dynamodb_service.metadata.0.name}:8000
...
否则它可能默认为 443。