Amazon EKS 網路政策的星星示範 - Amazon EKS

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

Amazon EKS 網路政策的星星示範

此示範會在您的 Amazon EKS 叢集上建立前端、後端和用戶端服務。示範中亦將建立管理圖形使用者介面,其顯示各服務之間可用的輸入和輸出路徑。建議您在未執行生產工作負載的叢集上完成示範。

在您建立任何網路政策前,所有服務都可以雙向通訊。在您套用網路政策後,便可看到用戶端只能與前端服務通訊,同時後端只能接受來自前端的流量。

  1. 套用前端、後端、用戶端和管理使用者介面服務:

    kubectl apply -f https://eksworkshop.com/beginner/120_network-policies/calico/stars_policy_demo/create_resources.files/namespace.yaml kubectl apply -f https://eksworkshop.com/beginner/120_network-policies/calico/stars_policy_demo/create_resources.files/management-ui.yaml kubectl apply -f https://eksworkshop.com/beginner/120_network-policies/calico/stars_policy_demo/create_resources.files/backend.yaml kubectl apply -f https://eksworkshop.com/beginner/120_network-policies/calico/stars_policy_demo/create_resources.files/frontend.yaml kubectl apply -f https://eksworkshop.com/beginner/120_network-policies/calico/stars_policy_demo/create_resources.files/client.yaml
  2. 檢視全部 Pods 叢集上的 。

    kubectl get pods -A

    範例輸出如下。

    在輸出中,您應該在以下輸出中顯示的命名空間中看到 pod。所以此 NAMES 的 Pod 和資料READY欄中的 Pod 數量與下列輸出中的不同。在您看到具有類似名稱的 Pod 且它們都Running位於 STATUS欄中之前,請勿繼續。

    NAMESPACE NAME READY STATUS RESTARTS AGE [...] client client-xlffc 1/1 Running 0 5m19s [...] management-ui management-ui-qrb2g 1/1 Running 0 5m24s stars backend-sz87q 1/1 Running 0 5m23s stars frontend-cscnf 1/1 Running 0 5m21s [...]
  3. 若要連接到管理使用者介面,請連接到在叢集上執行之服務的 EXTERNAL-IP

    kubectl get service/management-ui -n management-ui
  4. 打開瀏覽器到上一個步驟的位置。您應該會看到管理使用者介面。C 節點是用戶端服務,而 F 節點是前端服務,且 B 節點是後端服務。每個節點都有對所有其他節點的完整通訊存取權 (如粗體、上顏色行的文字所指示)。

    開放網路政策
  5. starsclient 命名空間中套用以下網路政策來將服務彼此隔離:

    kind: NetworkPolicy apiVersion: networking.k8s.io/v1 metadata: name: default-deny spec: podSelector: matchLabels: {}

    您可以使用下列命令將政策同時套用至兩個命名空間:

    kubectl apply -n stars -f https://eksworkshop.com/beginner/120_network-policies/calico/stars_policy_demo/apply_network_policies.files/default-deny.yaml kubectl apply -n client -f https://eksworkshop.com/beginner/120_network-policies/calico/stars_policy_demo/apply_network_policies.files/default-deny.yaml
  6. 重新整理您的瀏覽器。您看到管理使用者介面無法再到達任何節點,因此它們不會出現在使用者介面中。

  7. 套用下列不同的網路政策,以允許管理使用者介面存取服務。套用此政策以允許 UI:

    kind: NetworkPolicy apiVersion: networking.k8s.io/v1 metadata: namespace: stars name: allow-ui spec: podSelector: matchLabels: {} ingress: - from: - namespaceSelector: matchLabels: role: management-ui

    套用此政策以允許用戶端:

    kind: NetworkPolicy apiVersion: networking.k8s.io/v1 metadata: namespace: client name: allow-ui spec: podSelector: matchLabels: {} ingress: - from: - namespaceSelector: matchLabels: role: management-ui

    您可以使用下列命令來同時套用兩個政策:

    kubectl apply -f https://eksworkshop.com/beginner/120_network-policies/calico/stars_policy_demo/apply_network_policies.files/allow-ui.yaml kubectl apply -f https://eksworkshop.com/beginner/120_network-policies/calico/stars_policy_demo/apply_network_policies.files/allow-ui-client.yaml
  8. 重新整理您的瀏覽器。您將看到管理使用者介面再次可到達各節點,但各節點無法互相通訊。

    UI 存取網路政策
  9. 套用以下網路政策以允許流量從前端服務流向後端服務:

    kind: NetworkPolicy apiVersion: networking.k8s.io/v1 metadata: namespace: stars name: backend-policy spec: podSelector: matchLabels: role: backend ingress: - from: - podSelector: matchLabels: role: frontend ports: - protocol: TCP port: 6379
  10. 重新整理您的瀏覽器。您可以看到前端服務可以與後端服務通訊。

    前端到後端政策
  11. 套用以下網路政策以允許流量從用戶端流向後端服務:

    kind: NetworkPolicy apiVersion: networking.k8s.io/v1 metadata: namespace: stars name: frontend-policy spec: podSelector: matchLabels: role: frontend ingress: - from: - namespaceSelector: matchLabels: role: client ports: - protocol: TCP port: 80
  12. 重新整理您的瀏覽器。您可以看到用戶端可以與前端服務通訊。前端服務仍然可以與後端服務通訊。

    最終網路政策
  13. (選用) 在完成示範後,您可以刪除其資源。

    kubectl delete -f https://eksworkshop.com/beginner/120_network-policies/calico/stars_policy_demo/create_resources.files/client.yaml kubectl delete -f https://eksworkshop.com/beginner/120_network-policies/calico/stars_policy_demo/create_resources.files/frontend.yaml kubectl delete -f https://eksworkshop.com/beginner/120_network-policies/calico/stars_policy_demo/create_resources.files/backend.yaml kubectl delete -f https://eksworkshop.com/beginner/120_network-policies/calico/stars_policy_demo/create_resources.files/management-ui.yaml kubectl delete -f https://eksworkshop.com/beginner/120_network-policies/calico/stars_policy_demo/create_resources.files/namespace.yaml

    即使刪除資源之後,節點上仍可能有網路政策端點,這些端點可能會以非預期的方式干擾叢集中的聯網。移除這些規則的唯一確定方法,是重新啟動節點或終止所有節點並將其回收。若要終止所有節點,請將 Auto Scaling 群組所需的計數設定為 0,然後備份到所需的數字,或是只終止節點。