首页 > 解决方案 > 尽管指定了 Kubernetes 部署/服务端口,但连接端口错误

问题描述

解释我要做什么可能需要一段时间,但请耐心等待。

我指定了以下基础架构: 在此处输入图像描述

我有一份工作叫questo-server-deployment(我知道,令人困惑,但这是在不使用 minikube 上的入口的情况下访问部署的唯一方法)

这就是这些部分应该如何相互通信: 在此处输入图像描述

在这里您可以找到上述设置的整个 Kubernetes/Terraform 配置文件

我有 2 个从node.js应用程序暴露的端点(questo-server-deployment)我正在使用外部 IP 地址发出请求10.97.189.215questo-server-service如您在第一张图片中所见)

所以我有2个端点:

当我打印环境变量时,我得到以下信息:

➜ 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?

有什么想法需要在这里做什么吗?

标签: node.jsdockerkubernetesamazon-dynamodbterraform

解决方案


如何在 ConfigMap 中指定端口:

...
data = {
  DB_DOCKER_URL = ${kubernetes_service.questo_dynamodb_service.metadata.0.name}:8000
...

否则它可能默认为 443。


推荐阅读