使用环境变量将两个容器与 Kubernetes 连接

待定_

我是 k8s 的新手,需要一些有关如何进行故障排除的指导。

我有一个 postgres 容器和一个 graphql 容器。graphql 容器在启动时尝试连接到 postgres。

问题

graphql 容器无法连接到 postgres。这是启动时的错误:

{"internal":"无法连接到服务器:连接被拒绝\n\t服务器是否在主机“my-app”(xxx.xx.xx.xxx) 上运行并接受\n\t端口 5432 上的 TCP/IP 连接? \n", "path":"$","error":"连接错误","code":"postgres-error"}

我的理解是 graphql-container 无法识别 IP my-app (xxx.xx.xx.xxx)这是实际的 Pod 主机 IP,所以我很困惑为什么它不能识别它。如何解决此类错误?

我试过的

  • 将 deployment.yaml 中连接 uri 中的主机硬编码为实际的 pod 主机 IP。同样的错误。

  • 猛击到 graphql 容器并使用env命令验证它具有正确的 env 值

部署.yaml

spec:
  selector:
    matchLabels:
      service: my-app
  template:
    metadata:
      labels:
        service: my-app
...
  - name: my-graphql-container
    image: image-name:latest
    env:
    - name: MY_POSTGRES_HOST
      value: my-app
    - name: MY_DATABASE
      value: db
    - name: MY_POSTGRES_DB_URL # the postgres connection url that the graphql container uses
      value: postgres://$(user):$(pw)@$(MY_POSTGRES_HOST):5432/$(MY_DATABASE)
...
  - name: my-postgres-db
    image: image-name:latest
马特

关于 pods 的 k8s 文档中,您可以阅读:

Kubernetes 集群中的 Pod 主要有两种使用方式:

  • 运行单个容器的 Pod。[...]

  • 运行多个需要协同工作的容器的 Pod[...]

注意:在单个 Pod 中对多个位于同一位置并共同管理的容器进行分组是一个相对高级的用例。您应该仅在容器紧密耦合的特定实例中使用此模式。

每个 Pod 都用于运行给定应用程序的单个实例[...]


请注意,您的部署不符合此描述,因为您试图在一个 Pod 中运行两个应用程序。

请记住,每个容器始终使用一个 pod,并且如果无法将它们分开(并且由于某种原因它们必须一起运行),则仅在每个 pod 中使用多个容器。

其余的已经被大卫提到了。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章