日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

通過mTLS采集網格內應用的監控指標

在服務網格啟用mTLS(mutual TLS)的場景中,由于Sidecar代理會攔截所有應用的入向流量,應用公開的監控指標端口也必須通過mTLS進行加密訪問。對于一些關鍵業務,除了業務通信本身加密之外,加密采集監控指標也十分必要。本文以Prometheus Operator自建Prometheus的場景為例,介紹如何通過mTLS采集網格內應用的監控指標。

前提條件

已部署Bookinfo應用示例。具體操作,請參見在ASM實例關聯的集群中部署應用

配置Prometheus實例采集TLS指標說明

為了使Prometheus能夠通過Sidecar代理的TLS認證,Prometheus需要使用一個由ASM實例根證書簽發的證書。您可以借助Sidecar代理的證書掛載能力來實現這一目的。通過為Prometheus Pod定義約定的Annotation,可以使Sidecar代理將ASM控制平面為其簽發的證書掛載至共享卷,Prometheus容器通過掛載該共享卷即可得到證書和密鑰,具體操作步驟如下:

  1. 為Prometheus Pod增加卷istio-certs。

    volumes:
    - emptyDir:
        medium: Memory
      name: istio-certs
  2. 為Prometheus Pod添加如下2個annotation

    annotations:
      proxy.istio.io/config: |
        proxyMetadata:
          OUTPUT_CERTS: /etc/istio-output-certs
      sidecar.istio.io/userVolumeMount: '[{"name": "istio-certs", "mountPath": "/etc/istio-output-certs"}]'
    • proxy.istio.io/config:指定代理配置,其中proxyMetadata.OUTPUT_CERTS指定將證書和密鑰存儲至/etc/istio-output-certs路徑下。

    • sidecar.istio.io/userVolumeMount:將卷掛載到Sidecar代理容器的/etc/istio-output-certs路徑下。

  3. 為Prometheus容器掛載istio-certs卷至/etc/prom-certs/路徑,便于Prometheus從該路徑獲取由Sidecar代理寫入的證書和密鑰。

    volumeMounts:
    - mountPath: /etc/prom-certs/
      name: istio-certs
  4. 在采集配置中指定哪些工作負載使用TLS(只有注入了Sidecar的工作負載需要)發起指標抓取請求,并為TLS指定使用的證書路徑。

    本文以Prometheus Operator環境為例。

    apiVersion: monitoring.coreos.com/v1
    kind: ServiceMonitor
    metadata:
      name: productpage
      labels:
        app: productpage
        team: bookinfo
    spec:
      selector:
        matchLabels:
          app: productpage
      endpoints:
      - port: http-9080
        interval: 30s
        path: /metrics
        scheme: https
        tlsConfig:
          caFile: /etc/prom-certs/root-cert.pem
          certFile: /etc/prom-certs/cert-chain.pem
          keyFile: /etc/prom-certs/key.pem
          insecureSkipVerify: true

    在以上YAML中,通過labels指定對productpage應用進行指標采集,并對其采集端點進行了定義。在端點定義中,與TLS相關的配置如下:

    • scheme: https:指定使用HTTPS發起請求。

    • tlsConfig:指定證書、CA證書和密鑰的文件路徑。

    • insecureSkipVerify: true:由于Prometheus不支持Istio的身份命名方式,所以此處允許不安全的認證訪問。

以上配置可以使Prometheus掛載Sidecar提供的證書和密鑰,并使用該證書和密鑰發起TLS請求。

操作步驟

步驟一:安裝Prometheus Operator

  1. 執行以下命令,從GitHub上克隆Prometheus Operator項目的源代碼倉庫到本地計算機。

    git clone https://github.com/prometheus-operator/prometheus-operator.git
  2. 使用K8s集群的KubeConfig,執行以下命令,安裝Prometheus Operator。

    cd prometheus-operator/
    kubectl create -f bundle.yaml
  3. 執行以下命令,查看Pod狀態。

    kubectl get pods

    預期輸出:

    NAME                                     READY   STATUS        RESTARTS   
    prometheus-operator-58dd988c9c-qhrrp     2/2     Running       0      

    預期輸出表明Prometheus Operator已安裝成功。

步驟二:定義Prometheus CR部署Prometheus實例

  1. 將以下YAML保存至本地,命名為prometheus.yaml。

    YAML包含Prometheus實例聲明及其依賴的相關ServiceAccount、ClusterRole和ClusterRoleBinding。在Deployment配置中,可以看到配置Prometheus實例采集TLS指標說明中提及的相關證書卷掛載的配置。

    說明

    本文提供的Prometheus相關CR僅用于演示,請您根據實際生產環境進行調整。

    展開查看prometheus.yaml

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: prometheus-full-access
      namespace: default
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
      name: prometheus-full-access
    rules:
    - apiGroups: [""]
      resources:
      - nodes
      - nodes/metrics
      - services
      - endpoints
      - pods
      verbs: ["get", "list", "watch"]
    - apiGroups:
      - extensions
      - apps
      resources:
      - deployments
      - replicasets
      verbs: ["get", "list", "watch"]
    - apiGroups: [""]
      resources:
      - configmaps
      verbs: ["get"]
    - nonResourceURLs: ["/metrics"]
      verbs: ["get"]
    ---
    apiVersion: monitoring.coreos.com/v1
    kind: Prometheus
    metadata:
      name: default
      labels:
        prometheus: default
    spec:
      logLevel: debug
      podMetadata:
        annotations:
          traffic.sidecar.istio.io/includeInboundPorts: ""
          traffic.sidecar.istio.io/includeOutboundIPRanges: ""
          proxy.istio.io/config: |  # configure an env variable `OUTPUT_CERTS` to write certificates to the given folder
            proxyMetadata:
              OUTPUT_CERTS: /etc/istio-output-certs
          sidecar.istio.io/userVolumeMount: '[{"name": "istio-certs", "mountPath": "/etc/istio-output-certs"}]'
      volumes:
      - emptyDir:
          medium: Memory
        name: istio-certs
      volumeMounts:
      - mountPath: /etc/prom-certs/
        name: istio-certs
      replicas: 2
      version: v2.26.0
      serviceAccountName: prometheus-full-access
      serviceMonitorSelector:
        matchLabels:
          team: bookinfo
      ruleSelector:
        matchLabels:
          role: alert-rules
          prometheus: example
  2. 使用K8s集群的KubeConfig,執行以下命令,應用prometheus.yaml到K8s集群。

    kubectl apply -f prometheus.yaml
  3. 執行以下命令,檢查Prometheus實例是否正確被拉起。

    kubectl get pods

    預期輸出:

    NAME                                   READY   STATUS    RESTARTS
    prometheus-default-0                   3/3     Running   0 
    prometheus-default-1                   3/3     Running   0  
    prometheus-operator-58dd988c9c-qhrrp   2/2     Running   0  

    可以看到prometheus-default-0和prometheus-default-1兩個Pod已經啟動。

步驟三:定義ServiceMonitor CR聲明采集規則

  1. 將以下YAML保存至本地,命名為service-monitor.yaml。

    YAML包含ServiceMonitor API的聲明,描述了如何從工作負載采集監控指標。在YAML中可以看到在配置Prometheus實例采集TLS指標說明中提及的證書路徑和scheme的設置。

    說明

    本文提供的Prometheus相關CR僅用于演示,請您根據實際生產環境進行調整。

    iVersion: monitoring.coreos.com/v1
    kind: ServiceMonitor
    metadata:
      name: productpage
      labels:
        app: productpage
        team: bookinfo
    spec:
      selector:
        matchLabels:
          app: productpage
      endpoints:
      - port: http-9080
        interval: 30s
        path: /metrics
        scheme: https
        tlsConfig:
          caFile: /etc/prom-certs/root-cert.pem
          certFile: /etc/prom-certs/cert-chain.pem
          keyFile: /etc/prom-certs/key.pem
          insecureSkipVerify: true
  2. 使用K8s集群KubeConfig,執行以下命令,應用service-monitor.yaml到K8s集群。

    kubectl apply -f service-monitor.yaml

步驟四:將本地端口映射到Prometheus Operator服務,查看Prometheus采集到的指標

  1. 執行以下命令,創建端口轉發,將本地端口9090映射到Prometheus Operator服務的9090端口。

    kubectl port-forward svc/prometheus-operated 9090
  2. 在瀏覽器輸入localhost:9090,打開Prometheus的Web UI。

    image

  3. 在頂部菜單欄,選擇Status > Target,查看監控目標的狀態。

    說明

    如果某個目標通過TLS加密,在界面上可能會顯示為“Unavailable”(不可用),這可能是因為配置了TLS但沒有正確設置TLS認證。

    如下圖所示,可以看到目標StateUp,表示指標成功被抓取。

    image

  4. 在頂部菜單欄,單擊Graph返回查詢頁面,在查詢文本框中輸入python_gc_objects_collected_total指標名,單擊右側的Execute

    如下圖所示,可以看到上報的指標數據。

    image