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

时间:2020-07-04 22:12:32

标签: docker kubernetes google-cloud-platform microservices

到目前为止,我正在构建一个微服务全栈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 

我真的很好奇,我在这里想念什么吗?

1 个答案:

答案 0 :(得分:7)

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

每个服务也都有自己的IP地址;同样,尽管它们具有DNS名称,但从群集外部无法访问,因此应用程序可以找到它们。由于每个服务都有其自己的IP地址,因此您可以拥有所有要监听同一端口的服务。服务端口可以与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/。这些人将被转发到他们所连接的任何Pod。

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