【问题标题】:Kubernetes: How to link to internal services with different namespaces?Kubernetes:如何链接到不同命名空间的内部服务?
【发布时间】:2020-01-31 01:00:24
【问题描述】:

我正在尝试将位于不同命名空间中的两个 Kubernetes 服务链接在一起,例如 this。通过 DNS 链接它们,类型为 ExternalName。

在名为“db”的命名空间中,我希望有一个带有数据库的部署。能够拥有1个可以由不同项目共享的数据库。拥有一个持久卷。

但不知何故,它并没有像预期的那样工作。

命名空间“db”内的服务:

apiVersion: v1
kind: Service
metadata:
  labels:
    app: db-srv
  name: db-srv
  namespace: db
spec:
  ports:
  - name: "db-postgres"
    port: 5432
    targetPort: 5432
  selector:
    app: db
status:
  loadBalancer: {}

位于“myspace”-namespace 中的服务连接到 db:

apiVersion: v1
kind: Service
metadata:
  labels:
    app: myspace-db-service
  name: myspace-db-service
  namespace: myspace
spec:
  type: ExternalName
  externalName: db-srv.db.svc.cluster.local
  ports:
  - port: 5433
    # targetPort: 5432
status:
  loadBalancer: {}

后端连接到端口 5433 上的 myspace-service。

端口错了吗?

【问题讨论】:

  • 它怎么不能按预期工作?错误是什么? db 应用程序是否在 db 命名空间中?
  • externalName: db-srv.db.svc.cluster.local 是矛盾的。外部名称应该是外部的,即可以在集群外部访问。您使用的 URL 是集群本地的。
  • 感谢您的回答!我没有收到错误只是一个超时错误。

标签: kubernetes kubernetes-service


【解决方案1】:

答案是具有 ExternalType 的 Service 上的端口与其连接的 Service 需要相同。在 ExternalType 上使用 targetPort 不起作用。

这是正确的:

SVC(externalType) => PORT (5433) => SVC(other namespace) on PORT(5433) => 目标端口

这是不正确的:

SVC(externalType) => 端口 (5433) => 目标端口 (5432) => SVC(其他 命名空间)在 PORT(5432) => targetPort

【讨论】:

  • 此外,它看起来像externalName 中的端口,仅用于文档(约定)目的。
猜你喜欢
  • 2019-10-13
  • 2015-05-13
  • 2023-03-17
  • 1970-01-01
  • 2018-09-10
  • 2021-08-11
  • 1970-01-01
  • 2011-05-10
  • 2019-03-30
相关资源
最近更新 更多