我在 5001 埠的作業節點上的集群 ip 內運行了一個 Web 應用程式,我也在使用 k3s 進行集群部署,我檢查了集群連接它運行良好

部署將容器埠設定為 5001:
ports:
- containerPort:5001
這是服務檔案:
apiVersion: v1
kind: Service
metadata:
labels:
io.kompose.service: user-ms
name: user-ms
spec:
ports:
- name: http
port: 80
targetPort: 5001
selector:
io.kompose.service: user-ms
status:
loadBalancer: {}
這是入口檔案:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: user-ms-ingress
spec:
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: user-ms
port:
number: 80
502 Bad Gateway每當我輸入我的工人或主 IP 地址時,我都會收到錯誤
預期:它應該回傳 Web 應用程式頁面
我在網上查看,他們中的大多數都提到了錯誤的服務和入口埠,但我的埠是正確的,是的,我三重檢查:
嘗試從另一個 pod 在埠 80 上呼叫 user-ms 服務 -> 作業 嘗試在埠 5001 上的作業節點上呼叫集群 ip -> 作業
埠運行正確,為什么入口回傳 502?
這是入口描述:

這是 nginx 入口控制器 pod 的描述:

正常運行的 nginx 入口 pod:

這是 nginx 入口 pod 的日志:

對不起圖片,但我正在使用流媒體機器訪問終端,所以我無法復制粘貼
我應該如何除錯這個錯誤?
uj5u.com熱心網友回復:
您可以在 nginx 上打開訪問日志記錄,這將使您能夠在 ingress-controller 上查看更多日志,并跟蹤通過 ingress 路由的每個請求,如果您嘗試加載 UI/etc,它將顯示請求正在進入從瀏覽器或者如果您訪問特定端點,呼叫將在 nginx-controller 日志中可見。您可以得出結論,如果傳入的請求實際上是使用它路由到正確的服務,然后開始除錯服務(例如:檢查是否可以從集群中的任何 pod 卷曲端點等)
注意到你使用的是鏡像(k8s.gcr.io/ingress-nginx/controller:v1.2.0),如果你使用helm安裝,必須有一個帶有入口控制器的kubernetes-ingress configmap,默認為“disable-access” -log" 將為 true,將其更改為 false,您應該開始在 ingress-controller 上看到更多日志,如果您沒有看到詳細的日志,您可能希望退回 ingress 控制器 pod。
Kubectl 編輯 cm -n 命名空間 kubernetes-ingress
apiVersion: v1
data:
disable-access-log: "false" #turn this to false
map-hash-bucket-size: "128"
ssl-protocols: SSLv2 SSLv3 TLSv1 TLSv1.1 TLSv1.2 TLSv1.3
kind: ConfigMap
uj5u.com熱心網友回復:
如果使用 docker,EXPOSE 5001在Dockerfile.
可以從后綴為服務端點的 Ingress ControllerExternal IP或(如果已配置)訪問服務。DNS
服務
apiVersion: v1
kind: Service
metadata:
name: user-ms
spec:
ports:
- port: 5001
protocol: TCP
targetPort: 5001
selector:
app: user-ms
type: ClusterIP
入口路線
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: user-ms-ingress
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/proxy-buffer-size: 128k
nginx.ingress.kubernetes.io/proxy-buffering: 'on'
nginx.ingress.kubernetes.io/proxy-buffers-number: '4'
nginx.ingress.kubernetes.io/rewrite-target: /$1
nginx.ingress.kubernetes.io/use-regex: 'true'
spec:
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: user-ms
port:
number: 5001
uj5u.com熱心網友回復:
好的,我設法弄清楚了這一點,在 K3S 的默認設定中,它使用 traefik 作為默認入口,所以為什么我的 nginx 入口日志沒有顯示來自 502 Bad GateWay 的任何內容
我決定拆除我的集群并重新設定它,現在根據這個問題
我發現我正在network policy為我的所有微服務設定一個,我network policy從我的所有部署檔案中洗掉并洗掉它的設定。
最后再次檢查,我可以看到我可以正常訪問我的 api 和 swagger 頁面。
TLDR:
- 如果你在 K3S 上使用 nginx ingress,記得在創建集群時先禁用 traefik
- 不要忘記在入口配置中設定入口類
- 不要設定網路策略,因為 nginx pod 將無法呼叫該網路中的其他 pod
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/480763.html
標籤:Kubernetes Kubernetes入口 nginx入口 k3s
上一篇:我的豆莢不斷重啟,我不知道為什么
