【问题标题】:Kubernetes : Micro services running on same port?Kubernetes:在同一个端口上运行的微服务?
【发布时间】:2020-10-25 07:58:54
【问题描述】:

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

ReactJS(客户端微服务):监听 3000

身份验证(Auth 微服务):监听 3000 // 意外分配了相同的端口

从技术上讲,到目前为止我听到/了解到的是,我们不能有两个 Pod 在相同的端口上运行。 我真的很困惑我如何才能在不同的应用程序/pod 上使用相同的端口(完美地)运行应用程序?

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 

我真的很好奇,我在这里错过了什么吗?

【问题讨论】:

  • 我在 3000 端口上构建了两个应用程序/微服务,并且 auth-srv + client-srv 都在监听 3000 端口。这就是我想知道的。为什么这一切都不应该有意义?

标签: docker kubernetes google-cloud-platform microservices


【解决方案1】:

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

每个服务也有自己的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 转到 @ 987654326@。这些反过来会被转发到它们连接的任何 Pod。

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

【讨论】:

    猜你喜欢
    • 2020-11-25
    • 1970-01-01
    • 2015-02-02
    • 1970-01-01
    • 1970-01-01
    • 2019-01-21
    • 2019-06-23
    • 2020-03-18
    • 2016-06-07
    相关资源
    最近更新 更多