我正在尝试创建一个GKE Ingress,它基于path指向两个不同的后端服务。我看过几篇文章解释了这一点,因为gke入口不支持重写目标,所以只能用nginx进入。然而,这个谷歌文档,GKE Ingresss -多个后端服务,似乎意味着并非如此。我遵循了医生的步骤,但没有取得任何成功。只返回/路径前缀上可用的服务。任何其他路径前缀,如/v2,都会返回一个404 Not。
下面是我设置的详细信息。这里是否有一个明显的错误--谷歌文档是否不正确,这只能使用nginx入口?
-- Ingress
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: app-ingress
annotations:
kubernetes.io/ingress.global-static-ip-name: app-static-ip
networking.gke.io/managed-certificates: app-managed-cert
spec:
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: api-service
port:
number: 80
- path: /v2
pathType: Prefix
backend:
service:
name: api-2-service
port:
number: 8080
-- Service 1
apiVersion: v1
kind: Service
metadata:
name: api-service
labels:
app: api
spec:
type: NodePort
selector:
app: api
ports:
- port: 80
targetPort: 5000
-- Service 2
apiVersion: v1
kind: Service
metadata:
name: api-2-service
labels:
app: api-2
spec:
type: NodePort
selector:
app: api-2
ports:
- port: 8080
targetPort: 5000发布于 2022-02-25 10:51:02
GCP大会支持多个路径。这在使用Ingress设置HTTP(S)负载平衡中也有很好的描述。在我的测试中,我使用了v1和v2。
有三个可能的问题。
$ kk exec -ti first-55bb869fb8-76nvq -c container -- bin/sh
/ # netstat -plnt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 :::8080 :::* LISTEN 1/hello-appFirewall配置也可能导致问题。确保你有适当的设置。(通常,在新集群中,我不需要添加任何内容,但是如果您有更多的东西,并且有特定的防火墙配置,它可能会阻塞)。port,containerPort和targetPort之间的错误配置。下面是我的例子:
第一次部署与
apiVersion: apps/v1
kind: Deployment
metadata:
name: first
labels:
app: api
spec:
selector:
matchLabels:
app: api
template:
metadata:
labels:
app: api
spec:
containers:
- name: container
image: gcr.io/google-samples/hello-app:1.0
ports:
- containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
name: api-service
labels:
app: api
spec:
type: NodePort
selector:
app: api
ports:
- port: 5000
targetPort: 8080第二部署
apiVersion: apps/v1
kind: Deployment
metadata:
name: second
labels:
app: api-2
spec:
selector:
matchLabels:
app: api-2
template:
metadata:
labels:
app: api-2
spec:
containers:
- name: container
image: gcr.io/google-samples/hello-app:2.0
ports:
- containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
name: api-2-service
labels:
app: api-2
spec:
type: NodePort
selector:
app: api-2
ports:
- port: 6000
targetPort: 8080攻入
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: app-ingress
spec:
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: api-service
port:
number: 5000
- path: /v2
pathType: Prefix
backend:
service:
name: api-2-service
port:
number: 6000输出
$ curl 35.190.XX.249
Hello, world!
Version: 1.0.0
Hostname: first-55bb869fb8-76nvq
$ curl 35.190.XX.249/v2
Hello, world!
Version: 2.0.0
Hostname: second-d7d87c6d8-zv9jr请记住,通过添加特定的注释,您也可以在GKE上使用Nginx Ingress。
kubernetes.io/ingress.class: "nginx" 人们在GKE上使用GKE的主要原因是使用rewrite注释,以及使用ClusterIP或NodePort作为serviceType的可能性,而GCP ingress只允许使用NodePort serviceType。
在用于HTTP(S)负载平衡的GKE规范中可以找到其他信息
https://stackoverflow.com/questions/71257667
复制相似问题