Kubernetes容器无法正确通信

jc3wubiy  于 2023-06-21  发布在  Kubernetes
关注(0)|答案(1)|浏览(131)

集群信息:

Kubernetes版本:1.25
正在使用的云:
安装方式:
主机操作系统:Linux
CNI和版本:
CRI和版本:
大家好,我是使用Docker和Kubernetes的容器化应用程序的新手。基本上,我必须将已经编写的应用程序从Docker迁移到Kubernetes。我转换了docker-compose. yaml文件:

$ kompose convert -f docker-compose.yaml

我得到了我的deployments、persistenVolume和service yaml文件。我还必须使用localhost注册表,我成功地创建了一次,正如官方docker文档在https://docs.docker.com/registry/deploying/上所建议的那样:

docker run -d -p 5000:5000 --restart=always --name registry registry:2

我标记并正确地将我的图像推送到localhost:5000,我的pod运行正常。但是我不能让它们正确通信,我猜这是从Docker环境到Kubernetes环境的端口的问题,我认为这主要是Kubernetes使用的clusterIP服务。具体来说,我有一个pod,它运行一个容器,容器上有一个Postgres数据库,另一个运行后端逻辑并需要访问数据库。下面是在db-service.yaml中指定的端口:

spec:
  ports:
    - name: "8543"
      port: 8543
      targetPort: 5432
  selector:
    io.kompose.service: db

db-deployment. yaml中的容器端口:

ports:
     - containerPort: 5432

api-service. yaml中的端口(相对于后端):

ports:
    - name: "8000"
      port: 8000
      targetPort: 8000
  selector:
    io.kompose.service: api

以及api-deployment. yaml中的端口(相对于后端):端口:

- containerPort: 8000

我尝试改变各种端口组合,也使用5000:在它之前,因为也许他们需要本地主机的规范,顺便说一句,它从来没有改变任何东西。我期望端口的配置将以与Docker中相同的方式工作,所以我期望一切都能正常工作!

nnt7mjpx

nnt7mjpx1#

有几件事你需要在你的终端验证:

  1. DB和Backend的Service使用的选择器标签实际上应该指向相应的Pod标签。
    1.后端Pod正在使用的DB URI架构的值。它应该遵循<service-name>(相同命名空间)或<service-name>.<sevice-namespace>.svc.cluster.local(不同命名空间)格式,并具有正确的Service端口。查看此链接了解详细信息。
  2. DB和Backend的Pod和Services都在同一个命名空间中。

相关问题