我已配置 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/https
URL 的某个特定路径,因此对外暴露的端口只有80
和443
。
入口指path
的是一个后端Service
,它在单个上公开(从集群角度内部)您的应用程序(或者更确切地说,您的复杂应用程序包含的单个微服务)port
。