在Google容器引擎上的相同Kubernetes群集中的端口80上运行多个服务

Cal*_*leb 11 kubernetes google-kubernetes-engine

我可以在Google Container Engine上的Kubernetes中的端口80上运行多个服务吗?每个服务都有一个专用的外部IP地址,因此理论上路由器应该能够根据它的IP地址路由到每个服务.

到目前为止,我已经在Container Engine上为"frontend-1"和"frontend-2"创建了pod.我尝试为它们创建单独的服务,它们都在端口80上运行,具有唯一的外部IP,但它不起作用.是否有另一种方法可以在不使用自定义路由服务的情况下在Kubernetes中实现此目的?

服务1.yaml:

id: service-1
port: 80
containerPort: 8080
selector:
  name: frontend-1
createExternalLoadBalancer: true
Run Code Online (Sandbox Code Playgroud)

服务2.yaml:

id: service-2
port: 80
containerPort: 8081
selector:
  name: frontend-2
createExternalLoadBalancer: true
Run Code Online (Sandbox Code Playgroud)

rwi*_*n04 8

Kubernetes 1.1有一个Ingress类型,它允许您将不同的DNS名称/ ips路由到不同的服务.来自github

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: test
spec:
  rules:
  - host: foo.bar.com
    http:
      paths:
      - backend:
          serviceName: s1
          servicePort: 80
  - host: bar.foo.com
    http:
      paths:
      - backend:
          serviceName: s2
          servicePort: 80
Run Code Online (Sandbox Code Playgroud)


pro*_*ppy 6

截至目前,GKE 依赖 Kubernetes 0.4.x,它在每个节点上为每个服务分配端口。使用此配置,您不能让多个服务侦听端口 80。

Kubernetes 0.5.x 引入了一种新的网络模型,为每个服务映射一个单独的 IP。因此,一旦 GKE 升级,您将能够在不同的 IP/端口上公开多个服务。


小智 5

是的,多个服务可以有相同的端口,因为每个服务都有自己的 IP 地址,这无关紧要。在 google kubernetes 控制台中运行

kubectl get svc
Run Code Online (Sandbox Code Playgroud)

这将列出所有服务,并且可以通过将其复制到浏览器中使用相应的端口号来检查 EXTERNAL IP。