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 或其他端口。
我正在构建一个微服务全栈 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 或其他端口。