Kubernetes 服务 - 如何区分相同的目标端口

Kubernetes service - How to differentiate identical target ports

我有两个不同的部署创建两个不同的 pods 旋转两个不同的容器服务于不同的目的。但巧合的是,这两个容器暴露的端口都是 8080。

我创建了一个具有两个端口 8080 和 8081(type=LoadBalancer) 的服务来公开这两个部署。当我点击 LoadBalancer url 时,我从容器 1 收到响应,点击刷新几次后,我从容器 2 收到响应。这两个端口的行为相同。

我知道更改其中一个容器的 dockerfile 上公开的端口可以解决此问题。但作为 kubernetes 的新手,出于好奇,是否有任何不同的方法来处理这种情况?

你可以使用 Ingress。这是一个例子。

而不是为两者创建一项服务 pods。每个 pod 创建一个服务。确保两者的选择器标签不同。将类型设置为 NodePort。然后创建一个具有类似规则的 Ingress。

spec:
  rules:
  - host: cafe.example.com
    http:
      paths:
      - path: /tea
        backend:
          serviceName: tea-svc
          servicePort: 80
      - path: /coffee
        backend:
          serviceName: coffee-svc
          servicePort: 80

现在有很多入口解决方案。 k8s 中的 Ingress 只是一个网络规范。它只是一个代表您的网络逻辑的数据模型。各种入口控制器采用该规范并使用给定的解决方案实现逻辑。这是 nginx 入口控制器文档的 link。 https://www.nginx.com/products/nginx/kubernetes-ingress-controller/