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

L4認(rèn)證與鑒權(quán)

Ambient模式中,由于4層和7層的分離架構(gòu),導(dǎo)致認(rèn)證和授權(quán)的配置模型與原Sidecar模式不同。以ASM 1.18版本為例,本文介紹如何使用4層授權(quán)策略。

前提條件

已部署ASM網(wǎng)關(guān)和應(yīng)用,且成功驗證基本功能。具體操作,請參見入門示例的前提條件和步驟一。

使用限制

  • 授權(quán)策略在Ztunnel中的使用限制如下:

    • action字段不支持CUSTOM,即Ztunnel不支持自定義授權(quán)服務(wù)。

    • source字段中不支持requestPrincipalsremoteIpBlocks。

    • operation字段中除ports以外的所有字段均不支持。

  • 當(dāng)不存在Waypoint代理時,Ztunnel代理是授權(quán)策略的執(zhí)行者。此時,授權(quán)策略需要綁定給指定的工作負(fù)載。

  • Ztunnel只是一個4層代理,如果在其上配置包含7層規(guī)則的授權(quán)策略,只有4層的規(guī)則會生效。

示例一:productpage只允許被網(wǎng)關(guān)和sleep訪問

本示例主要驗證Ztunnel代理能否正確執(zhí)行principals鑒權(quán)邏輯。具體操作,請參見入門示例。

測試完成后,請執(zhí)行以下命令,清除授權(quán)策略。

kubectl delete authorizationpolicy productpage-viewer

示例二:禁止訪問productpage的9080端口

本示例主要驗證Ztunnel代理能否正確執(zhí)行目標(biāo)端口鑒權(quán)邏輯。

  1. 使用以下內(nèi)容,創(chuàng)建productpage-viewer.yaml。

    apiVersion: security.istio.io/v1beta1
    kind: AuthorizationPolicy
    metadata:
     name: productpage-viewer
     namespace: default
    spec:
     selector:
       matchLabels:
         app: productpage
     action: DENY
     rules:
     - to:
       - operation:
           ports:
           - "9080"
  2. 在ASM實例對應(yīng)的KubeConfig環(huán)境下,執(zhí)行以下命令,創(chuàng)建授權(quán)策略。

    kubectl apply -f productpage-viewer.yaml
  3. 驗證授權(quán)策略是否生效。

    1. 執(zhí)行以下命令,進(jìn)行訪問測試。

      kubectl exec deploy/sleep -- curl -s "http://$GATEWAY_HOST/productpage"

      預(yù)期輸出:

      upstream connect error or disconnect/reset before headers. reset reason: connection termination%
    2. 執(zhí)行以下命令,進(jìn)行訪問測試

      kubectl exec deploy/notsleep -- curl -s "http://$GATEWAY_HOST/productpage"

      預(yù)期輸出:

      upstream connect error or disconnect/reset before headers. reset reason: connection termination%
    3. 執(zhí)行以下命令,進(jìn)行訪問測試

      kubectl exec deploy/sleep -- curl -s http://productpage:9080/

      預(yù)期輸出:

      command terminated with exit code 56
    4. 執(zhí)行以下命令,進(jìn)行訪問測試

      kubectl exec deploy/notsleep -- curl -s http://productpage:9080/ | grep -o "<title>.*</title>"

      預(yù)期輸出:

      command terminated with exit code 56

      可以看到,所有Pod都不能訪問productpage的9080端口。

      前兩個測試命令通過網(wǎng)關(guān)訪問productpage的請求報錯為upstream connect error or disconnect/reset before headers. reset reason: connection termination%,這個錯誤實際由ASM網(wǎng)關(guān)返回。網(wǎng)關(guān)連接不上后端服務(wù)(后端服務(wù)拒絕網(wǎng)關(guān)連接9080端口),就會報一個HTTP錯誤(實際狀態(tài)碼為503)。

      后兩個測試命令的返回值為command terminated with exit code 56,由curl命令返回。curl命令直接和productpage建立連接,但連接失敗,因此沒有HTTP錯誤,和直接通過網(wǎng)關(guān)訪問的錯誤有區(qū)別。

  4. 執(zhí)行以下命令,清除授權(quán)策略。

    kubectl delete authorizationpolicy productpage-viewer

示例三:不允許sleep Pod的IP訪問productpage

本示例主要驗證Ztunnel代理能否正確執(zhí)行源IP鑒權(quán)邏輯。

  1. 執(zhí)行以下命令,查看sleep Pod的IP。

    kubectl get pod -o wide | grep sleep

    預(yù)期輸出:

    notsleep-5fb85fb789-z****         1/1     Running   0          48m   10.0.67.92   cn-hangzhou.10.0.67.41   <none>           <none>
    sleep-bc9998558-z****             1/1     Running   0          48m   10.0.67.91   cn-hangzhou.10.0.67.42   <none>           <none>

    預(yù)期輸出表明當(dāng)前測試環(huán)境的sleep Pod的IP為10.0.67.91。每個環(huán)境里的實際Pod IP可能不同。

  2. 使用以下內(nèi)容,創(chuàng)建productpage-viewer.yaml,限制productpage拒絕來自sleep Pod IP的請求。

    apiVersion: security.istio.io/v1beta1
    kind: AuthorizationPolicy
    metadata:
     name: productpage-viewer
     namespace: default
    spec:
     selector:
       matchLabels:
         app: productpage
     action: DENY
     rules:
     - from:
       - source:
           ipBlocks:
           - ${sleep Pod IP}
  3. 在ASM實例對應(yīng)的KubeConfig環(huán)境下,執(zhí)行以下命令,創(chuàng)建授權(quán)策略。

    kubectl apply -f productpage-viewer.yaml
  4. 驗證授權(quán)策略是否生效。

    1. 執(zhí)行以下命令,進(jìn)行訪問測試。

      kubectl exec deploy/sleep -- curl -s "http://$GATEWAY_HOST/productpage" | grep -o "<title>.*</title>"

      預(yù)期輸出:

      <title>Simple Bookstore App</title>
    2. 執(zhí)行以下命令,進(jìn)行訪問測試。

      kubectl exec deploy/notsleep -- curl -s "http://$GATEWAY_HOST/productpage" | grep -o "<title>.*</title>"

      預(yù)期輸出:

      <title>Simple Bookstore App</title>
    3. 執(zhí)行以下命令,進(jìn)行訪問測試。

      kubectl exec deploy/sleep -- curl -s http://productpage:9080/

      預(yù)期輸出:

      command terminated with exit code 56
    4. 執(zhí)行以下命令,進(jìn)行訪問測試。

      kubectl exec deploy/notsleep -- curl -s http://productpage:9080/ | grep -o "<title>.*</title>"

      預(yù)期輸出:

      <title>Simple Bookstore App</title>

      可以看到只使用Ztunnel代理,沒有Waypoint代理,并不能實現(xiàn)禁止sleep Pod通過網(wǎng)關(guān)訪問productpage。因為授權(quán)策略中的remoteIpBlocks字段依賴請求的X-Forwarded-For Header實現(xiàn),Ztunnel只是一個4層代理。

  5. 執(zhí)行以下命令,清除授權(quán)策略。

    kubectl delete authorizationpolicy productpage-viewer

示例四:禁止istio-system命名空間的Pod訪問productpage

本示例主要驗證Ztunnel代理能否正確執(zhí)行源命名空間鑒權(quán)邏輯。

  1. 使用以下內(nèi)容,創(chuàng)建productpage-viewer.yaml,禁止istio-system命名空間下的Pod訪問productpage。

    apiVersion: security.istio.io/v1beta1
    kind: AuthorizationPolicy
    metadata:
     name: productpage-viewer
     namespace: default
    spec:
     selector:
       matchLabels:
         app: productpage
     action: DENY
     rules:
     - from:
       - source:
           namespaces:
           - istio-system
  2. 在ASM實例對應(yīng)的KubeConfig環(huán)境下,執(zhí)行以下命令,創(chuàng)建授權(quán)策略。

    kubectl apply -f productpage-viewer.yaml
  3. 驗證授權(quán)策略是否生效。

    1. 執(zhí)行以下命令,進(jìn)行訪問測試。

      kubectl exec deploy/sleep -- curl -s "http://$GATEWAY_HOST/productpage"

      預(yù)期輸出:

      upstream connect error or disconnect/reset before headers. reset reason: connection termination%
    2. 執(zhí)行以下命令,進(jìn)行訪問測試

      kubectl exec deploy/notsleep -- curl -s "http://$GATEWAY_HOST/productpage"

      預(yù)期輸出:

      upstream connect error or disconnect/reset before headers. reset reason: connection termination%
    3. 執(zhí)行以下命令,進(jìn)行訪問測試

      kubectl exec deploy/sleep -- curl -s http://productpage:9080/ | grep -o "<title>.*</title>"

      預(yù)期輸出:

      <title>Simple Bookstore App</title>
    4. 執(zhí)行以下命令,進(jìn)行訪問測試

      kubectl exec deploy/notsleep -- curl -s http://productpage:9080/ | grep -o "<title>.*</title>"

      預(yù)期輸出:

      <title>Simple Bookstore App</title>

      ASM網(wǎng)關(guān)部署在istio-system命名空間下??梢钥吹?,授權(quán)策略創(chuàng)建成功后,sleep和notsleep無法通過網(wǎng)關(guān)訪問productpage,但是可以直接訪問productpage。

  4. 執(zhí)行以下命令,清除授權(quán)策略。

    kubectl delete authorizationpolicy productpage-viewer