Kubernetes Ingress:如何在一条路径上公开两个端口?

Kubernetes Ingress:如何在一条路径上公开两个端口?

我已配置 GCE Ingress,并在端口 443 上使用 SSL。我试图让端口 28080 指向我的独立可操作服务器

我的 Ingress yaml 目前有这个:

# web-ingress.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: gke-ingress
  annotations:
    kubernetes.io/ingress.class: "gce"
    ingress.kubernetes.io/ssl-redirect: "true"
    kubernetes.io/ingress.allow-http: "false"
spec:
  rules:
  - host: example.com
    http:
      paths:
      - path: /ws
        backend:
          serviceName: websocket
          servicePort: 28080
  tls:
  - secretName: gkecert
    hosts:
    - example.com
  backend:
    serviceName: web
    servicePort: 443

如果我将 websocket 服务的路径设置为 /,它会搞乱根路径(错误 503)。据我所知,入口无法处理一条路径上的 2 个端口。那么人们如何在不通过路径分隔的情况下将他们的前端连接到 websocket 服务器呢?

答案1

我认为您的第二个后端服务缺少路径,如果您想使用一个主机和两个服务的入口,您应该添加路径。请参阅入口扇出那么你的入口应该是这样的:

# web-ingress.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: gke-ingress
  annotations:
    kubernetes.io/ingress.class: "gce"
    ingress.kubernetes.io/ssl-redirect: "true"
    kubernetes.io/ingress.allow-http: "false"
spec:
  tls:
  - secretName: gkecert
    hosts:
    - example.com
  rules:
  - host: example.com
    http:
      paths:
      - path: /ws
        backend:
          serviceName: websocket
          servicePort: 28080
      - path: /
        backend:
          serviceName: web
          servicePort: 443

如果要使用相同的主机,则必须指定路径。您可以使用不同的主机将前端连接到 websocket 服务器,而无需按路径分隔。请参阅有关我们如何做到这一点的文档关联

答案2

Kubernetes Ingress:如何在一条路径上公开两个端口?

正如评论中所述阿利瓦,这是不可能的。我还想说,从逻辑的角度来看,将一条路径映射到两个不同的端口号没有多大意义ingress

你对外暴露的是http/httpsURL 的某个特定路径,因此对外暴露的端口只有80443

入口指path的是一个后端Service,它在单个上公开(从集群角度内部)您的应用程序(或者更确切地说,您的复杂应用程序包含的单个微服务)port

相关内容