เป็นเวลาหลายสัปดาห์แล้วที่ฉันหมดเวลาไปมากเมื่อ gcp lbs ตรวจสอบ ingress-nginx healthz ในขณะที่ทุกอย่างตอบสนองอย่างถูกต้อง
ฉันมีคลัสเตอร์ GKE ที่มี Container Optimized OS และ n1-standard-4 เป็นเวอร์ชันเครื่องและ kubernetes v1.21.10-gke.2000
.
นี่คือโหนดของฉัน:
kubectl อันดับต้น ๆ
ชื่อ CPU (แกน) CPU% หน่วยความจำ (ไบต์) หน่วยความจำ%
gke-xxx-gke-cluster0-xxx-gke-cluster0-0a2ef32c-6lj0 821m 20% 3683Mi 29%
gke-xxx-gke-cluster0-xxx-gke-cluster0-98567a10-pqk2 2302m 58% 4983Mi 40%
gke-xxx-gke-cluster0-xxx-gke-cluster0-cd892740-3v6m 83m 2% 852Mi 6%
นี่คือพ็อดและบริการ ingress-nginx ของฉัน:
สถานะพร้อมชื่อเริ่มอายุใหม่
pod/nginx-ingress-controller-fnxlc 1/1 วิ่ง 0 65m
pod/nginx-ingress-controller-m4nq2 1/1 วิ่ง 0 67m
pod/nginx-ingress-controller-tb4gc 1/1 วิ่ง 0 66m
ประเภทชื่อ CLUSTER-IP EXTERNAL-IP PORT(S) อายุ
บริการ / nginx-ingress-controller NodePort REDACTED <ไม่มี> 80:32080/TCP,443:32443/TCP 69d
บริการ / nginx-ingress-controller-metrics ClusterIP REDACTED <ไม่มี> 10254/TCP 69d
นี่คือค่าหางเสือของฉันสำหรับ ngress-nginx/ขาเข้า-nginx
รุ่น 4.1.0
:
ingressClassResource:
ชื่อ: nginx
เปิดใช้งาน: จริง
ค่าเริ่มต้น: เท็จ
ค่าคอนโทรลเลอร์: "k8s.io/ingress-nginx"
ชนิด: DaemonSet
livenessProbe:
httpรับ:
เส้นทาง: "/healthz"
พอร์ต: 10254
รูปแบบ: HTTP
initialDelaySeconds: 10
periodSeconds: 10
หมดเวลาวินาที: 1
เกณฑ์ความสำเร็จ: 1
เกณฑ์ความล้มเหลว: 5
ความพร้อม Probe:
httpรับ:
เส้นทาง: "/healthz"
พอร์ต: 10254
รูปแบบ: HTTP
initialDelaySeconds: 10
periodSeconds: 10
หมดเวลาวินาที: 1
เกณฑ์ความสำเร็จ: 1
เกณฑ์ความล้มเหลว: 3
คำอธิบายประกอบของพ็อด:
prometheus.io/scrape_metrics_app: "จริง"
prometheus.io/scrape_metrics_port_app: "10254"
prometheus.io/scrape_metrics_port_name_app: เมตริก
ทรัพยากร:
คำขอ:
ซีพียู: 100 ม
หน่วยความจำ: 120Mi
บริการ:
เปิดใช้งาน: จริง
คำอธิบายประกอบ:
cloud.google.com/backend-config: '{"ports": {"80":"security-policy"}}'
พอร์ตเป้าหมาย:
http:http
https:https
ประเภท: NodePort
โหนดพอร์ต:
http:32080
https:32443
ทีซีพี:
8080:32808
เมตริก:
พอร์ต: 10254
# ถ้าพอร์ตนี้เปลี่ยน ให้เปลี่ยน healthz-port: เป็น extraArgs: ตามนั้น
เปิดใช้งาน: จริง
ชื่อคลาสลำดับความสำคัญ: nginx-ingress
การรับสมัคร Webhooks:
เปิดใช้งาน: เท็จ
ปะ:
ชื่อคลาสลำดับความสำคัญ: nginx-ingress
การกำหนดค่าแบ็กเอนด์ของฉัน:
---
apiVersion: scheduling.k8s.io/v1
ชนิด: PriorityClass
ข้อมูลเมตา:
ชื่อ: nginx-ingress
มูลค่า: 1000000
globalDefault: เท็จ
---
รุ่น api: cloud.google.com/v1
ชนิด: BackendConfig
ข้อมูลเมตา:
ชื่อ: นโยบายความปลอดภัย
ข้อมูลจำเพาะ:
หมดเวลาวินาที: 60
การเชื่อมต่อการระบายน้ำ:
การระบายน้ำหมดเวลาวินาที: 10
นโยบายความปลอดภัย:
ชื่อ: "ข้อมูลปกปิด"
ตรวจสุขภาพ:
checkIntervalSec: 10
หมดเวลาวินาที: 5
เกณฑ์สุขภาพ: 1
ไม่ดีต่อสุขภาพเกณฑ์: 2
พอร์ต: 32080
ประเภท: HTTP
เส้นทางคำขอ: /healthz
---
รุ่น api: networking.k8s.io/v1
ชนิด: ทางเข้า
ข้อมูลเมตา:
ชื่อ: nginx-ingress-controller-gke
คำอธิบายประกอบ:
kubernetes.io/ingress.global-static-ip-name: "ข้อมูลปกปิด"
kubernetes.io/ingress.class: "gce"
ข้อมูลจำเพาะ:
ชื่อคลาส ingress: nginx
แบ็กเอนด์เริ่มต้น:
บริการ:
ชื่อ: nginx-ingress-controller
ท่า:
จำนวน: 80
กฎไฟร์วอลล์ของฉัน:
อนุญาต:
- โปรโตคอล IP: tcp
พอร์ต:
- '32080'
- '80'
การประทับเวลาการสร้าง: 'ข้อมูลปกปิด'
คำอธิบาย: ''
ทิศทาง: INGRESS
ปิดใช้งาน: เท็จ
id: 'ข้อมูลปกปิด'
ชนิด: คำนวณ#ไฟร์วอลล์
บันทึกการกำหนดค่า:
เปิดใช้งาน: เท็จ
ชื่อ: REDACTED-allow-i-google-gke-health
เครือข่าย: https://www.googleapis.com/compute/v1/projects/REDACTED/global/networks/REDACTED
ลำดับความสำคัญ: 1,000
selfLink: https://www.googleapis.com/compute/v1/projects/REDACTED/global/firewalls/REDACTED-allow-i-google-gke-health
ช่วงแหล่งที่มา:
- 130.211.0.0/22
- 35.191.0.0/16
บัญชีบริการเป้าหมาย:
- ปกปิด
บริการแบ็กเอนด์ของฉันดีต่อสุขภาพ:
---
แบ็กเอนด์: https://www.googleapis.com/compute/v1/projects/REDACTED/zones/europe-west1-b/instanceGroups/k8s-ig--REDACTED
สถานะ:
สถานะสุขภาพ:
- สภาวะสุขภาพ: สุขภาพดี
ตัวอย่าง: https://www.googleapis.com/compute/v1/projects/REDACTED/zones/europe-west1-b/instances/REDACTED
ที่อยู่ IP: ปกปิด
พอร์ต: 32080
ชนิด: compute#backendServiceGroupHealth
---
แบ็กเอนด์: https://www.googleapis.com/compute/v1/projects/REDACTED/zones/europe-west1-c/instanceGroups/k8s-ig--REDACTED
สถานะ:
สถานะสุขภาพ:
- สภาวะสุขภาพ: สุขภาพดี
ตัวอย่าง: https://www.googleapis.com/compute/v1/projects/REDACTED/zones/europe-west1-c/instances/REDACTED
ที่อยู่ IP: ปกปิด
พอร์ต: 32080
ชนิด: compute#backendServiceGroupHealth
---
แบ็กเอนด์: https://www.googleapis.com/compute/v1/projects/REDACTED/zones/europe-west1-d/instanceGroups/k8s-ig--REDACTED
สถานะ:
สถานะสุขภาพ:
- สภาวะสุขภาพ: สุขภาพดี
ตัวอย่าง: https://www.googleapis.com/compute/v1/projects/REDACTED/zones/europe-west1-d/instances/REDACTED
ที่อยู่ IP: ปกปิด
พอร์ต: 32080
ชนิด: compute#backendServiceGroupHealth
พร็อกซี http/https เป้าหมายของฉันไม่เป็นไร
ปัญหาคือตั้งแต่ GKE 1.21 ฉันหมดเวลาการตรวจสุขภาพจำนวนมากจาก google lb:
{
"insertId": "120vrdac2cf",
"jsonPayload": {
"healthCheckProbeResult": {
"healthCheckProtocol": "HTTP",
"สถานะสุขภาพ": "ไม่ดีต่อสุขภาพ",
"สถานะสุขภาพก่อนหน้า": "สุขภาพดี",
"probeResultText": "การตอบกลับ HTTP: , ข้อผิดพลาด: หมดเวลารอการเชื่อมต่อ",
"probeSourceIp": "35.191.13.216",
"ที่อยู่ IP": "ข้อมูลปกปิด",
"probeCompletionTimestamp": "2022-04-27T15:40:52.868912018Z",
"previousDetailedHealthState": "สุขภาพดี",
"targetIp": "ข้อมูลปกปิด",
"detailedHealthState": "หมดเวลา",
"responseLatency": "5.001074s",
"พอร์ตเป้าหมาย": 32080,
"probeRequest": "/healthz"
}
},
"ทรัพยากร": {
"ประเภท": "gce_instance_group",
"ป้ายกำกับ": {
"instance_group_name": "k8s-ig--d350a72156e88e7d",
"instance_group_id": "7274987390644036118",
"สถานที่": "europe-west1-c",
"project_id": "ปกปิด"
}
},
"การประทับเวลา": "2022-04-27T15:40:53.307035382Z",
"ความรุนแรง": "ข้อมูล",
"logName": "projects/REDACTED/logs/compute.googleapis.com%2Fhealthchecks",
"receiveTimestamp": "2022-04-27T15:40:54.568716762Z"
}
นี่คือภาพหน้าจอของข้อผิดพลาดทั้งหมด:
ข้อผิดพลาดในการตรวจสุขภาพ
ฉันไม่มีปัญหาเกี่ยวกับไฟร์วอลล์
จากโหนด ไม่มีปัญหาการตรวจสุขภาพ:
ในขณะที่จริง; ทำ curl -m 2 -o /dev/null -sw "%{http_code} %{time_total}s\n" 0:32080/healthz; เสร็จแล้ว
200 0.000984s
200 0.000845s
200 0.000704s
200 0.002411s
200 0.001235s
200 0.000784s
200 0.001471s
200 0.000498s
การตอบสนอง http จะเป็น 200 เสมอ
ทั้งหมดนี้หมายความว่าทั้ง gke และ pods นั้นแข็งแรง ถ้าพ็อดไม่แข็งแรง ฉันจะมีการรีสตาร์ทบางอย่างซึ่งฉันไม่มีเลย
การตรวจสอบความสมบูรณ์ของพ็อดของฉันจะตอบสนองในหน่วยมิลลิวินาทีเสมอ
แต่ด้วยเหตุผลบางอย่างที่ไม่ทราบสาเหตุ ฉันมีปัญหาในการตรวจสุขภาพมากมาย หมดเวลารอการเชื่อมต่อ
ซึ่งทำให้เกิดปัญหาการจราจรบนเว็บไซต์ของฉัน
ในระหว่างการดีบัก ฉันไม่มีการเข้าชมเว็บไซต์เลย
ฉันจำไม่ได้ว่ามีปัญหาใดๆ กับ GKE 1.19/1.20
. แน่นอนว่าฉันลองเวอร์ชัน 1.21 มาหลายเวอร์ชัน แต่ก็ยังไม่มีโชค
ฉันเปลี่ยนจาก ingress-nginx 4.0.16
ถึง 4.1.0
แต่ปัญหายังคงอยู่
ฉันยังเพิ่มช่วงเวลาการตรวจสุขภาพและการหมดเวลา แต่ปัญหาเดียวกัน
ฉันเหมือนกับว่า nginx กำลังโหลดการกำหนดค่าของเขาซ้ำหลายครั้ง แต่จริงๆแล้วไม่ใช่เพราะในบันทึกนั้นค่อนข้างเหมือนกัน:
nginx-ingress-controller-fnxlc ตัวควบคุม I0427 16:10:38.352350 8 event.go:285] เหตุการณ์ (v1.ObjectReference{Kind:"Ingress", Namespace:"nginx-ingress", ชื่อ:"nginx-ingress-controller- gke", UID:"45baf918-c5b9-499e-9930-b6e5d03aa38e", APIVersion:"networking.k8s.io/v1", ResourceVersion:"83550719", FieldPath:""}): ประเภท: 'ปกติ' เหตุผล: ' ซิงค์' กำหนดเวลาสำหรับการซิงค์
ไม่มีใครมีปัญหาเดียวกัน?
ความช่วยเหลือใด ๆ ?