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

對網格內服務訪問外部網站進行授權控制

Kubernetes集群中的NetworkPolicy能夠控制某些外部網站允許或禁止被某些命名空間下的服務訪問,但是NetworkPolicy的方式對網絡隔離比較粗粒度,對應用安全、業務安全的保護不夠到位。您可以使用ASM零安全體系,動態配置授權策略,實現對命名空間下服務訪問外部網站進行授權控制,從而降低風險。以demo-frontend命名空間和aliyun.com網站為例,本文介紹如何限制demo-frontend命名空間下的全部服務去訪問外部網站aliyun.com。

前提條件

步驟一:創建測試服務

  1. 獲取集群KubeConfig并通過kubectl工具連接集群

  2. 在demo-frontend命名空間下創建sleep服務。

    1. 使用以下內容,創建sleep.yaml

      展開查看sleep.yaml

      apiVersion: v1
      kind: ServiceAccount
      metadata:
        name: sleep
      ---
      apiVersion: v1
      kind: Service
      metadata:
        name: sleep
        labels:
          app: sleep
          service: sleep
      spec:
        ports:
        - port: 80
          name: http
        selector:
          app: sleep
      ---
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: sleep
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: sleep
        template:
          metadata:
            labels:
              app: sleep
          spec:
            terminationGracePeriodSeconds: 0
            serviceAccountName: sleep
            containers:
            - name: sleep
              image: curlimages/curl
              command: ["/bin/sleep", "3650d"]
              imagePullPolicy: IfNotPresent
              volumeMounts:
              - mountPath: /etc/sleep/tls
                name: secret-volume
            volumes:
            - name: secret-volume
              secret:
                secretName: sleep-secret
                optional: true
      ---
    2. 執行以下命令,創建sleep服務。

      kubectl apply -f sleep.yaml -n demo-frontend
  3. 驗證測試服務是否注入Sidecar成功。

    1. 登錄容器服務管理控制臺,在左側導航欄選擇集群

    2. 集群列表頁面,單擊目標集群名稱,然后在左側導航欄,選擇工作負載 > 容器組

    3. 容器組頁面上方,命名空間選擇demo-frontend,單擊sleep服務的容器組名稱。

      容器頁簽下可以看到istio-proxy容器,說明sleep服務注入Sidecar成功。

步驟二:創建出口網關

服務網格內的服務訪問網格外的網站時,可以通過出口網關管控流量。配置出口網關的授權策略后,還可以設置條件來控制是否允許訪問外部網站。本文設置出口網關的名稱為egressgateway。具體操作,請參見創建出口網關

步驟三:設置外部服務的訪問策略

默認對外部服務的訪問策略為允許訪問全部外部服務。為了實現對特定的外部網站進行訪問控制,您需要設置外部服務訪問策略為REGISTRY_ONLY,未注冊為ServiceEntry的外部服務將無法被服務網格中的服務訪問。

  1. 設置外部服務的訪問策略。

    1. 登錄ASM控制臺,在左側導航欄,選擇服務網格 > 網格管理

    2. 網格管理頁面,單擊目標實例名稱,然后在左側導航欄,選擇數據面組件管理 > Sidecar代理配置

    3. 全局頁簽,單擊外部服務訪問策略,配置對外部服務的訪問策略OutboundTrafficPolicyREGISTRY_ONLY,然后單擊更新設置

  2. 將外部服務注冊到ServiceEntry中。

    1. 在網格詳情頁面左側導航欄,選擇集群與工作負載管理 > 集群外服務(ServiceEntry),然后在右側頁面,單擊使用YAML創建

    2. 設置命名空間istio-system,將以下內容復制到文本框中,單擊創建

      apiVersion: networking.istio.io/v1beta1
      kind: ServiceEntry
      metadata:
        name: aliyuncom-ext
        namespace: istio-system
      spec:
        hosts:
          - www.aliyun.com  
        location: MESH_EXTERNAL
        ports:
          - name: http
            number: 80
            protocol: HTTP
          - name: tls
            number: 443
            protocol: TLS
        resolution: DNS

步驟四:創建流量策略

創建網關規則、目標規則和虛擬服務,使demo-frontend命名空間下的流量路由到出口網關,再由出口網關路由到外部網站。

  1. 使用以下YAML,在istio-system命名空間創建網關規則。具體操作,請參見管理網關規則

    apiVersion: networking.istio.io/v1beta1
    kind: Gateway
    metadata:
      name: istio-egressgateway
      namespace: istio-system
    spec:
      selector:
        istio: egressgateway
      servers:
        - port:
            number: 80
            name: http
            protocol: HTTPS
          tls:
            mode: ISTIO_MUTUAL
          hosts:
            - '*'

    mode設置為ISTIO_MUTUAL,表示啟用雙向TLS服務認證,即網格內服務訪問外部網站需要TLS服務認證。

  2. 使用以下YAML,在demo-frontend命名空間創建目標規則。具體操作,請管理目標規則

    apiVersion: networking.istio.io/v1beta1
    kind: DestinationRule
    metadata:
      name: target-egress-gateway
      namespace: demo-frontend
    spec:
      host: istio-egressgateway.istio-system.svc.cluster.local
      subsets:
        - name: target-egress-gateway-mTLS
          trafficPolicy:
            loadBalancer:
              simple: ROUND_ROBIN
            tls:
              mode: ISTIO_MUTUAL

    mode設置為ISTIO_MUTUAL,表示啟用雙向TLS服務認證,即外部網站訪問網格內服務需要TLS服務認證。

  3. 使用以下內容,在demo-frontend命名空間創建虛擬服務。具體操作,請參見管理虛擬服務

    展開查看VirtualService YAML

    apiVersion: networking.istio.io/v1beta1
    kind: VirtualService
    metadata:
      name: example-com-through-egress-gateway
      namespace: demo-frontend
    spec:
      exportTo:
        - istio-system
        - demo-frontend
      gateways:
        - mesh
        - istio-system/istio-egressgateway
      hosts:
        - www.aliyun.com
      http:
        - match:
            - gateways:
                - mesh
              port: 80
          route:
            - destination:
                host: istio-egressgateway.istio-system.svc.cluster.local
                port:
                  number: 80
                subset: target-egress-gateway-mTLS
              weight: 100
        - match:
            - gateways:
                - istio-system/istio-egressgateway
              port: 80
          route:
            - destination:
                host: www.aliyun.com
                port:
                  number: 80
              weight: 100

    http設置了兩條匹配規則:

    • 第一條設置gatewaysmesh,表示作用范圍為demo-frontend命名空間下的Sidecar代理,將demo-frontend命名空間下的流量路由到出口網關。

    • 第二條設置gatewaysistio-system/istio-egressgateway,表示將出口網關的流量路由到注冊的外部服務。

步驟五:創建授權策略

在demo-frontend命名空間下創建授權策略,作用在出口網關egressgateway上,拒絕來自demo-frontend命名空間的訪問。關于授權策略的更多信息,請參見授權策略(Authorization Policy)

  1. 登錄ASM控制臺,在左側導航欄,選擇服務網格 > 網格管理

  2. 網格管理頁面,單擊目標實例名稱,然后在左側導航欄,選擇網格安全中心 > 授權策略,然后單擊創建

  3. 創建頁面,配置相關信息,然后單擊創建

    配置項

    說明

    名稱

    輸入授權策略的名稱。

    策略類型

    設置為拒絕

    ASM網關

    網關生效頁簽,設置ASM網關egressgateway

    請求匹配規則

    添加請求來源區域,打開命名空間(Namespaces)開關,設置值為demo-frontend

步驟六:驗證限制demo-frontend命名空間中的服務訪問外部網站是否成功

  1. 登錄容器服務管理控制臺,在左側導航欄選擇集群

  2. 集群列表頁面,單擊目標集群名稱,然后在左側導航欄,選擇工作負載 > 容器組

  3. 容器組頁面上方,命名空間選擇demo-frontend,然后在操作列,單擊sleep容器對應的終端 > sleep

  4. 執行以下命令,訪問外部網站aliyun.com。

    curl -I http://www.aliyun.com

    預期輸出:

    HTTP/1.1 403 Forbidden
    content-length: 19
    content-type: text/plain
    date: Thu, 12 Oct 2023 07:14:09 GMT
    server: envoy
    x-envoy-upstream-service-time: 4

    返回403錯誤,說明demo-frontend命名空間下的服務訪問外部網站aliyun.com失敗。限制demo-frontend命名空間中的服務訪問外部網站成功。