簡體   English   中英

如何攔截對 Kubernetes 中服務的請求?

[英]How to intercept requests to a service in Kubernetes?

比方說,我定義了一個Servicemy-backend的Kubernetes。 我想攔截發送到此服務的每個請求,正確的方法是什么? 例如,同一命名空間下的另一個容器通過http://my-backend發送請求。

我嘗試將准入控制器與驗證 Webhook 一起使用。 但是,它可以攔截對服務資源的 CRUD 操作,但無法攔截與特定服務的任何連接。

在 Kubernetes 中沒有直接的方法來攔截對服務的請求。

對於解決方法,這是您可以執行的操作-

  1. 創建一個 sidecar 容器只是為了記錄每個傳入的請求。 日志記錄

  2. 在容器中運行tcpdump -i eth0 -n並過濾掉請求

  3. 使用Zipkin

  4. 在雲提供商上創建服務,將有自己的日志記錄機制。 對於前 - aws 上的負載均衡器服務將在 S3 上生成其日志。 aws elb 日志

您可以使用服務網格,例如istio istio 服務網格與每個 pod 一起部署了一個特使代理邊車。 Envoy 攔截所有傳入 pod 的請求,並可以為您提供諸如請求數量等指標。服務網格帶來了更多功能,例如分布式跟蹤、速率限制等。

Kubernetes NetworkPolicy 對象將對此有所幫助。 網絡策略控制 Pod 組如何相互通信以及如何與其他網絡端點通信。 您只能根據 pod 選擇器允許進入 my-backend 服務的流量。 下面是允許來自特定的入口流量的示例

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
   name: ingress-only-from-frontend-to-my-backend
   namespace: default    
spec:
   podSelector:
      matchLabels:
          <my-backend pod label>
   policyTypes:
   - Ingress
   ingress:
    - from:  
      - podSelector:
          matchLabels:
            <Frontend web pod label>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM