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

Arc*_*nic 5 kubernetes websocket google-kubernetes-engine

我有一个 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
Run Code Online (Sandbox Code Playgroud)

如果我将 websocket 服务的路径设置为 /,它会破坏根路径(错误 503)。从我读过的内容来看,入口无法处理一条路径上的 2 个端口。那么人们如何将他们的前端连接到 websocket 服务器而不用路径分隔呢?

小智 2

我认为您的第二个后端服务缺少路径,如果您想将入口与一台主机和两个服务一起使用,您应该添加路径。查看入口扇出,然后你的入口应该是这样的:

# 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
Run Code Online (Sandbox Code Playgroud)

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