到目前为止,我正在构建一个微服务全栈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
我真的很好奇,我在这里想念什么吗?
答案 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或其他端口。