Kubernetes:同一端口上的微服务运行?

Kubernetes : Micro services running on same port?

我正在构建一个微服务全栈 Web 应用程序(到目前为止):

ReactJS (client microservice) : listens on 3000

Authentication (Auth microservice) : listens on 3000 // accidently assigned the same port

从技术上讲,到目前为止,我 heard/learned 是 不能 两个 Pods 运行ning 同一个端口。 我真的很困惑 我如何能够 运行 应用程序(完美地)像这样在不同的 applications/pods 上使用相同的端口?

ingress-nginx 配置:

apiVersion: extensions/v1beta1
kind: Ingress
metadata: 
    name: ingress-service 
    annotations: 
        kubernetes.io/ingress.class: nginx 
        nginx.ingress.kubernetes.io/use-regex: 'true'
spec: 
    ## our custom routing rules  
    rules: 
        - host: ticketing.dev 
          http: 
            paths:
                - path: /api/users/?(.*) 
                  backend: 
                    serviceName: auth-srv 
                    servicePort: 3000
                - path: /?(.*)
                  backend: 
                    serviceName: client-srv
                    servicePort: 3000 

我很好奇,我是不是漏掉了什么?

每个 Pod 都有自己的网络命名空间和自己的 IP 地址,尽管特定于 Pod 的 IP 地址无法从集群外部访问,也无法在集群内部真正发现。由于每个 Pod 都有自己的 IP 地址,因此您可以拥有任意数量的 Pods 所有监听同一个端口。

每个服务也有自己的IP地址;同样,无法从集群外部访问,尽管它们具有 DNS 名称以便应用程序可以找到它们。由于每个服务都有自己的 IP 地址,您可以根据需要拥有任意数量的服务,所有服务都在侦听同一个端口。 Service 端口可以与 Pod 端口相同或不同。

可以通过 HTTP 从集群外部访问 Ingress 控制器。您显示的 Ingress 规范定义了 HTTP 路由规则。如果我使用 .dev TLD 设置 DNS 服务并为指向入口控制器的 ticketing.dev 定义 A 记录,则 http://ticketing.dev/api/users/anything 会转发到集群内的 http://auth-srv.default.svc.cluster.local:3000/ , http://ticketing.dev/otherwise 转到 http://client-srv.default.svc.cluster.local:3000/。这些反过来将被转发到他们所连接的任何 Pods。

没有特别禁止多个 Pods 或具有相同端口的服务。我倾向于将我所有的 HTTP 服务设置为在端口 80 上侦听,因为它是标准的 HTTP 端口,即使个人 Pods 正在侦听端口 3000 或 8000 或 8080 或其他端口。