Score:0

Google LB ล้มเหลวในการตรวจสอบ ingress-nginx pods healthz เป็นระยะๆ

ธง cn

เป็นเวลาหลายสัปดาห์แล้วที่ฉันหมดเวลาไปมากเมื่อ 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:""}): ประเภท: 'ปกติ' เหตุผล: ' ซิงค์' กำหนดเวลาสำหรับการซิงค์

ไม่มีใครมีปัญหาเดียวกัน? ความช่วยเหลือใด ๆ ?

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา