我正在嘗試創建一個 GKE Ingress,它基于路徑指向兩個不同的后端服務。我看過一些帖子解釋這只能通過 nginx Ingress 實作,因為 gke ingress 不支持 rewrite-target。但是,此 Google 檔案GKE Ingresss - Multiple backend services似乎另有說明。我已按照檔案中的步驟進行操作,但沒有取得任何成功。僅回傳路徑前綴上可用的服務/。任何其他路徑前綴,如/v2,都會回傳 404 Not found。
我的設定的詳細資訊如下。這里是否有明顯的錯誤——谷歌檔案是否不正確,這只能使用 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
uj5u.com熱心網友回復:
GCP Ingress 支持多條路徑。這在使用 Ingress 設定 HTTP(S) 負載平衡中也有很好的描述。對于我的測驗,我使用了 Hello-world v1 和 v2。
有3個可能的問題。
- 問題是打開了容器埠。您可以使用 netstat 進行檢查:
$ 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-app
問題也可能是由
Firewall配置引起的。確保您有正確的設定。(一般來說,在新集群中我不需要添加任何東西,但如果你有更多東西并且有特定的防火墻配置,它可能會阻止)。和之間
port的配置錯誤。containerPorttargetPort
在我的例子下面:
第一次部署
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
請記住,您也可以Nginx Ingress通過添加特定注釋在 GKE 上使用。
kubernetes.io/ingress.class: "nginx"
nginx ingress人們使用on的主要原因GKE是使用rewrite注釋和使用ClusterIP或NodePort作為 serviceType 的可能性,其中GCP ingress只允許NodePortserviceType。
您可以在GKE Ingress for HTTP(S) 負載平衡中找到更多資訊
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/434287.html
