Kubernetes

Kubernetes Ingress:如何在一條路徑上公開兩個埠?

  • May 10, 2021

我在埠 443 上配置了 GCE Ingress 並使用 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 伺服器而不用路徑分隔呢?

我認為您的第二個後端服務缺少路徑,如果您想將入口與一個主機和兩個服務一起使用,您應該添加路徑。查看入口扇出然後你的入口應該是這樣的:

# 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 伺服器,而無需使用不同的主機按路徑分隔。請參閱有關我們如何做的文件連結

引用自:https://serverfault.com/questions/923023