Điểm:0

Google LB không kiểm tra được các nhóm nginx xâm nhập một cách rời rạc

lá cờ cn

Đã nhiều tuần kể từ khi tôi có nhiều thời gian chờ khi gcp lbs kiểm tra ingress-nginx healthz trong khi mọi thứ phản hồi chính xác.

Tôi đang có một cụm GKE với Hệ điều hành được tối ưu hóa vùng chứa và n1-tiêu chuẩn-4 dưới dạng phiên bản máy và kubernetes v1.21.10-gke.2000.

Đây là các nút của tôi:

top kubectl
TÊN CPU(lõi) CPU% BỘ NHỚ(byte) BỘ NHỚ%   
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%        

Đây là các nhóm và dịch vụ ingress-nginx của tôi:

TÊN TÌNH TRẠNG SẴN SÀNG KHỞI ĐỘNG LẠI TUỔI
pod/nginx-ingress-controller-fnxlc 1/1 Đang chạy 0 65m
pod/nginx-ingress-controller-m4nq2 1/1 Chạy 0 67m
pod/nginx-ingress-controller-tb4gc 1/1 Chạy 0 66m

TÊN LOẠI CLUSTER-IP (CỔNG IP NGOÀI) TUỔI
dịch vụ/nginx-ingress-controller NodePort ĐÃ GIẤU <none> 80:32080/TCP,443:32443/TCP 69d
dịch vụ/nginx-ingress-controller-metrics ClusterIP ĐÃ GIẤU <none> 10254/TCP 69d

Dưới đây là các giá trị lái xe của tôi cho ngress-nginx/ingress-nginx phiên bản 4.1.0:

  ingressClassResource:
    tên: nginx
    đã bật: đúng
    mặc định: sai
    giá trị bộ điều khiển: "k8s.io/ingress-nginx"

  loại: DaemonSet

  livenessProbe:
    httpNhận:
      đường dẫn: "/healthz"
      cổng: 10254
      lược đồ: HTTP
    ban đầuDelaySeconds: 10
    chu kỳGiây: 10
    thời gian chờGiây: 1
    ngưỡng thành công: 1
    failThreshold: 5
  sẵn sàngThăm dò:
    httpNhận:
      đường dẫn: "/healthz"
      cổng: 10254
      lược đồ: HTTP
    ban đầuDelaySeconds: 10
    chu kỳGiây: 10
    thời gian chờGiây: 1
    ngưỡng thành công: 1
    failThreshold: 3
  podChú thích:
    prometheus.io/scrape_metrics_app: "true"
    prometheus.io/scrape_metrics_port_app: "10254"
    prometheus.io/scrape_metrics_port_name_app: số liệu
  tài nguyên:
    yêu cầu:
      CPU: 100m
      bộ nhớ: 120Mi

  dịch vụ:
    đã bật: đúng

    chú thích:
      cloud.google.com/backend-config: '{"ports": {"80":"security-policy"}}'

    cổng đích:
      http: http
      https: https

    loại: NútPort
    nútPorts:
      http:32080
      https:32443
      tcp:
        8080: 32808

  chỉ số:
    cổng: 10254
    # nếu cổng này bị thay đổi, hãy thay đổi healthz-port: trong extraArgs: cho phù hợp
    đã bật: đúng
  priorityClassName: nginx-ingress

  tuyển sinhWebhook:
    đã bật: sai
    vá:
      priorityClassName: nginx-ingress

Cấu hình phụ trợ của tôi:

---
apiVersion: lập lịch trình.k8s.io/v1
loại: Lớp ưu tiên
metadata:
  tên: nginx-ingress
giá trị: 1000000
toàn cầuDefault: sai
---
apiVersion: cloud.google.com/v1
loại: BackendConfig
metadata:
  tên: chính sách bảo mật
thông số kỹ thuật:
  thời gian chờSec: 60
  kết nốiDraining:
    thoát nướcTimeoutSec: 10
  chính sách bảo mật:
    tên: "BẢO MẬT"
  kiểm tra sức khỏe:
    checkIntervalSec: 10
    thời gian chờSec: 5
    khỏe mạnh Ngưỡng: 1
    không lành mạnhThreshold: 2
    cổng: 32080
    loại: HTTP
    đường dẫn yêu cầu: /healthz
---
apiVersion: mạng.k8s.io/v1
loại: Xâm nhập
metadata:
  tên: nginx-ingress-controller-gke
  chú thích:
    kubernetes.io/ingress.global-static-ip-name: "DỮ LIỆU BỊ GIẤU"
    kubernetes.io/ingress.class: "gce"
thông số kỹ thuật:
  ingressClassName: nginx
  phụ trợ mặc định:
    dịch vụ:
      tên: nginx-ingress-controller
      Hải cảng:
        số: 80

Quy tắc tường lửa của tôi:

cho phép:
- Giao thức IP: tcp
  cổng:
  - '32080'
  - '80'
tạoDấu thời gian: 'BẢO MẬT'
sự miêu tả: ''
hướng: INGRESS
vô hiệu hóa: sai
id: 'BẢO MẬT'
loại: tính toán # tường lửa
logConfig:
  kích hoạt: sai
tên: REDACTED-allow-i-google-gke-health
mạng: https://www.googleapis.com/compute/v1/projects/REDACTED/global/networks/REDACTED
ưu tiên: 1000
selfLink: https://www.googleapis.com/compute/v1/projects/REDACTED/global/firewalls/REDACTED-allow-i-google-gke-health
phạm vi nguồn:
- 130.211.0.0/22
- 35.191.0.0/16
targetServiceAccounts:
- ĐÃ GIẤU

Dịch vụ phụ trợ của tôi LÀ KHỎE MẠNH:

---
phụ trợ: https://www.googleapis.com/compute/v1/projects/REDACTED/zones/europe-west1-b/instanceGroups/k8s-ig--REDACTED
trạng thái:
  tình trạng sức khỏe:
  - tình trạng sức khỏe: KHỎE MẠNH
    ví dụ: https://www.googleapis.com/compute/v1/projects/REDACTED/zones/europe-west1-b/instances/REDACTED
    Địa chỉ ip: ĐÃ GIẤU
    cổng: 32080
  loại: tính toán # backendServiceGroupHealth
---
phụ trợ: https://www.googleapis.com/compute/v1/projects/REDACTED/zones/europe-west1-c/instanceGroups/k8s-ig--REDACTED
trạng thái:
  tình trạng sức khỏe:
  - tình trạng sức khỏe: KHỎE MẠNH
    ví dụ: https://www.googleapis.com/compute/v1/projects/REDACTED/zones/europe-west1-c/instances/REDACTED
    Địa chỉ ip: ĐÃ GIẤU
    cổng: 32080
  loại: tính toán # backendServiceGroupHealth
---
phụ trợ: https://www.googleapis.com/compute/v1/projects/REDACTED/zones/europe-west1-d/instanceGroups/k8s-ig--REDACTED
trạng thái:
  tình trạng sức khỏe:
  - tình trạng sức khỏe: KHỎE MẠNH
    dụ: https://www.googleapis.com/compute/v1/projects/REDACTED/zones/europe-west1-d/instances/REDACTED
    Địa chỉ ip: ĐÃ GIẤU
    cổng: 32080
  loại: tính toán # backendServiceGroupHealth

Proxy http/https mục tiêu của tôi là OKAY.

Vấn đề là, kể từ GKE 1.21, tôi có rất nhiều thời gian chờ kiểm tra sức khỏe từ google lb:

{
  "insertId": "120vrdac2cf",
  "jsonPayload": {
    "healthCheckProbeResult": {
      "healthCheckProtocol": "HTTP",
      "healthState": "KHÔNG KHỎE MẠNH",
      "previousHealthState": "KHỎE MẠNH",
      "probeResultText": "Phản hồi HTTP: , Lỗi: Hết thời gian chờ kết nối",
      "probeSourceIp": "35.191.13.216",
      "ipAddress": "BẢO MẬT",
      "probeCompletionTimestamp": "2022-04-27T15:40:52.868912018Z",
      "previousDetailedHealthState": "KHỎE MẠNH",
      "targetIp": "BẢO MẬT",
      "detailedHealthState": "HẾT THỜI GIAN",
      "responseLatency": "5.001074s",
      "cổng đích": 32080,
      "probeRequest": "/healthz"
    }
  },
  "nguồn": {
    "type": "gce_instance_group",
    "nhãn": {
      "instance_group_name": "k8s-ig--d350a72156e88e7d",
      "instance_group_id": "7274987390644036118",
      "địa điểm": "châu Âu-tây1-c",
      "project_id": "BẢO MẬT"
    }
  },
  "dấu thời gian": "2022-04-27T15:40:53.307035382Z",
  "mức độ nghiêm trọng": "THÔNG TIN",
  "logName": "projects/REDACTED/logs/compute.googleapis.com%2Fhealthchecks",
  "receiveTimestamp": "2022-04-27T15:40:54.568716762Z"
}

Đây là một ảnh chụp màn hình của tất cả các lỗi: lỗi kiểm tra sức khỏe

Tôi không có vấn đề về tường lửa. Từ một nút, không có vấn đề kiểm tra sức khỏe: trong khi đúng; làm curl -m 2 -o /dev/null -sw "%{http_code} %{time_total}s\n" 0:32080/healthz; xong

200 0,000984 giây
200 0,000845s
200 0,000704s
200 0,002411 giây
200 0,001235s
200 0,000784 giây
200 0,001471 giây
200 0,000498 giây

Phản hồi http luôn là 200. Tất cả điều này có nghĩa là cả gke và nhóm đều khỏe mạnh. Nếu các nhóm không khỏe mạnh, tôi sẽ có một số lần khởi động lại mà tôi hoàn toàn không có. Kiểm tra tình trạng nhóm của tôi luôn phản hồi trong mili giây.

Nhưng vì một số lý do không rõ, tôi gặp rất nhiều vấn đề về kiểm tra sức khỏe Hết thời gian chờ kết nối đang gây ra sự cố lưu lượng truy cập trên trang web của tôi.

Trong quá trình gỡ lỗi, tôi không có lưu lượng truy cập trên trang web của mình.

Tôi không nhớ có bất kỳ vấn đề nào với GKE 1.19/1.20. Tất nhiên tôi đã thử nhiều phiên bản 1.21 nhưng vẫn không gặp may.

Tôi đã chuyển từ ingress-nginx 4.0.16 đến 4.1.0 nhưng vấn đề vẫn còn.

Tôi cũng đã tăng khoảng thời gian kiểm tra sức khỏe và thời gian chờ nhưng vấn đề tương tự.

Tôi giống như có thể nginx đang tải lại cấu hình của anh ấy rất nhiều lần nhưng thực tế không phải vậy vì trong nhật ký khá giống nhau:

nginx-ingress-controller-fnxlc controller I0427 16:10:38.352350 8 event.go:285] Event(v1.ObjectReference{Kind:"Ingress", Namespace:"nginx-ingress", Name:"nginx-ingress-controller- gke", UID:"45baf918-c5b9-499e-9930-b6e5d03aa38e", APIVersion:"networking.k8s.io/v1", ResourceVersion:"83550719", FieldPath:""}): gõ: 'Bình thường' lý do: ' Sync' Được lên lịch để đồng bộ hóa

Có ai có cùng vấn đề này không? Bất kỳ giúp đỡ?

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.