本頁提供操作說明,說明如何在 Google Distributed Cloud (GDC) 實體隔離環境中,使用 Kubernetes 網路政策設定標準叢集的叢集內流量。
Kubernetes NetworkPolicy 能夠規範不同 pod 群組之間的通訊方式,以及 pod 群組與其他網路端點之間的通訊方式。NetworkPolicy 資源會使用標籤選取 Pod,並定義規則,指定允許哪些流量傳送至所選 Pod。這些政策的範圍僅限於本機,且只適用於定義政策的叢集內流量,除非建立允許所有流量的政策,否則無法與其他標準和共用叢集的端點通訊。
事前準備
如要設定 Kubernetes 網路政策,您必須在叢集中具備必要權限,才能在相關命名空間中建立、修改及刪除 NetworkPolicy 資源。
建立叢集內 Pod 對 Pod 政策
這些政策可控管同一標準叢集內 Pod 之間的流量。
建立叢集內 Pod 對 Pod 的 Ingress 政策
如要允許叢集內 Pod 對 Pod 的 Ingress 流量,請建立並套用下列資源:
kubectl --kubeconfig CLUSTER_API_SERVER apply -f - <<EOF apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: allow-intra-cluster-ingress-traffic namespace: SUBJECT_NAMESPACE spec: podSelector: matchLabels: SUBJECT_LABEL_KEY: SUBJECT_LABEL_VALUE policyTypes: - Ingress ingress: - from: - namespaceSelector: matchLabels: Kubernetes.io/metadata.name: PEER_NAMESPACE podSelector: matchLabels: PEER_LABEL_KEY: PEER_LABEL_VALUE ports: - protocol: TCP port: PORT EOF更改下列內容:
CLUSTER_API_SERVER:叢集 API 伺服器的 kubeconfig 路徑。如果尚未為 API 伺服器產生 kubeconfig 檔案,請參閱登入瞭解詳情。SUBJECT_NAMESPACE:標準叢集中的主體命名空間。PEER_NAMESPACE:標準叢集中的對等互連命名空間。SUBJECT_LABEL_KEY:用於選取主體工作負載的標籤鍵。例如app、tier或role。SUBJECT_LABEL_VALUE:與SUBJECT_LABEL_KEY相關聯的值。舉例來說,如果SUBJECT_LABEL_KEY是app,而SUBJECT_LABEL_VALUE是backend,則標籤為app: backend的工作負載會接收流量。PEER_LABEL_KEY:用於選取對等工作負載的標籤鍵。PEER_LABEL_VALUE:與PEER_LABEL_KEY相關聯的值。PORT:允許流量的主體工作負載通訊埠。
建立叢集內 Pod 對 Pod 的輸出政策
如要允許叢集內 Pod 對 Pod 的輸出流量,請建立並套用下列資源:
kubectl --kubeconfig CLUSTER_API_SERVER apply -f - <<EOF apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: allow-egress-intra-cluster-traffic namespace: SUBJECT_NAMESPACE spec: podSelector: matchLabels: SUBJECT_LABEL_KEY: SUBJECT_LABEL_VALUE policyTypes: - Egress egress: - to: - namespaceSelector: matchLabels: Kubernetes.io/metadata.name: PEER_NAMESPACE podSelector: matchLabels: PEER_LABEL_KEY: PEER_LABEL_VALUE ports: - protocol: TCP port: PORT EOF更改下列內容:
CLUSTER_API_SERVER:叢集 API 伺服器的 kubeconfig 路徑。如果尚未為 API 伺服器產生 kubeconfig 檔案,請參閱登入瞭解詳情。SUBJECT_NAMESPACE:標準叢集中的主體命名空間。PEER_NAMESPACE:標準叢集中的對等互連命名空間。SUBJECT_LABEL_KEY:用於選取主體工作負載的標籤鍵。例如app、tier或role。SUBJECT_LABEL_VALUE:與SUBJECT_LABEL_KEY相關聯的值。舉例來說,如果SUBJECT_LABEL_KEY為app,且SUBJECT_LABEL_VALUE為backend,則具有app: backend標籤的工作負載會傳送流量。PEER_LABEL_KEY:用於選取對等工作負載的標籤鍵。PEER_LABEL_VALUE:與PEER_LABEL_KEY相關聯的值。PORT:允許流量的對等工作負載通訊埠。
使用負載平衡器建立叢集內 Pod 對 Pod 政策
如果流量是透過外部負載平衡器轉送,這些政策會控管同一叢集內 Pod 之間的流量。
使用負載平衡器建立叢集內 Pod 對 Pod 的 Ingress 政策
如要使用負載平衡器允許叢集內 Pod 對 Pod 的輸入流量,請建立並套用下列資源:
kubectl --kubeconfig CLUSTER_API_SERVER apply -f - <<EOF apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: allow-intra-cluster-ingress-traffic-via-elb namespace: SUBJECT_NAMESPACE spec: podSelector: matchLabels: SUBJECT_LABEL_KEY: SUBJECT_LABEL_VALUE policyTypes: - Ingress ingress: - from: - ipBlock: cidr: EGRESS_NAT_IP/32 ports: - protocol: TCP port: PORT EOF更改下列內容:
CLUSTER_API_SERVER:叢集 API 伺服器的 kubeconfig 路徑。如果尚未為 API 伺服器產生 kubeconfig 檔案,請參閱登入瞭解詳情。SUBJECT_NAMESPACE:標準叢集中的主體命名空間。SUBJECT_LABEL_KEY:用於選取主體工作負載的標籤鍵。例如app、tier或role。SUBJECT_LABEL_VALUE:與SUBJECT_LABEL_KEY相關聯的值。舉例來說,如果SUBJECT_LABEL_KEY是app,而SUBJECT_LABEL_VALUE是backend,則標籤為app: backend的工作負載會接收流量。EGRESS_NAT_IP:來源 Pod 的輸出 NAT IP。PORT:允許流量的主體工作負載通訊埠。
使用負載平衡器建立叢集內 Pod 對 Pod 的輸出政策
如要使用負載平衡器允許叢集內 Pod 對 Pod 的輸出流量,請建立並套用下列資源:
kubectl --kubeconfig CLUSTER_API_SERVER apply -f - <<EOF apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: allow-intra-cluster-egress-traffic-via-elb namespace: SUBJECT_NAMESPACE spec: podSelector: matchLabels: SUBJECT_LABEL_KEY: SUBJECT_LABEL_VALUE policyTypes: - Egress egress: - to: - ipBlock: cidr: ELB_EXTERNAL_IP/32 ports: - protocol: TCP port: PORT EOF更改下列內容:
CLUSTER_API_SERVER:叢集 API 伺服器的 kubeconfig 路徑。如果尚未為 API 伺服器產生 kubeconfig 檔案,請參閱登入瞭解詳情。SUBJECT_NAMESPACE:標準叢集中的主體命名空間。SUBJECT_LABEL_KEY:用於選取主體工作負載的標籤鍵。例如app、tier或role。SUBJECT_LABEL_VALUE:與SUBJECT_LABEL_KEY相關聯的值。舉例來說,如果SUBJECT_LABEL_KEY為app,且SUBJECT_LABEL_VALUE為backend,則具有app: backend標籤的工作負載會傳送流量。ELB_EXTERNAL_IP:負載平衡器的外部 IP 位址。PORT:允許流量傳輸的外部端點通訊埠。
建立機構外部政策
這些政策可控管標準叢集中 Pod 與外部端點 (叢集外的任何 IP 位址) 之間的流量。
為機構外部流量建立 Ingress 政策
如要允許來自機構外部端點的連入流量,請建立並套用下列資源:
kubectl --kubeconfig CLUSTER_API_SERVER apply -f - <<EOF apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: allow-ingress-from-organization-external-to-standard-cluster-pod namespace: SUBJECT_NAMESPACE spec: podSelector: matchLabels: SUBJECT_LABEL_KEY: SUBJECT_LABEL_VALUE policyTypes: - Ingress ingress: - from: - ipBlock: cidr: EXTERNAL_CIDR ports: - protocol: TCP port: PORT EOF更改下列內容:
CLUSTER_API_SERVER:叢集 API 伺服器的 kubeconfig 路徑。如果尚未為 API 伺服器產生 kubeconfig 檔案,請參閱登入瞭解詳情。SUBJECT_NAMESPACE:標準叢集中的主體命名空間。SUBJECT_LABEL_KEY:用於選取主體工作負載的標籤鍵。例如app、tier或role。SUBJECT_LABEL_VALUE:與SUBJECT_LABEL_KEY相關聯的值。舉例來說,如果SUBJECT_LABEL_KEY是app,而SUBJECT_LABEL_VALUE是backend,則標籤為app: backend的工作負載會接收流量。EXTERNAL_CIDR:外部 CIDR,例如:20.0.0.0/16。PORT:允許流量的主體工作負載通訊埠。
為機構外部流量建立輸出政策
如要允許輸出流量前往機構外部端點,請建立並套用下列資源:
kubectl --kubeconfig CLUSTER_API_SERVER apply -f - <<EOF apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: allow-egress-from-standard-cluster-pod-to-organization-external namespace: SUBJECT_NAMESPACE spec: podSelector: matchLabels: SUBJECT_LABEL_KEY: SUBJECT_LABEL_VALUE policyTypes: - Egress egress: - to: - ipBlock: cidr: EXTERNAL_CIDR ports: - protocol: TCP port: PORT EOF更改下列內容:
CLUSTER_API_SERVER:叢集 API 伺服器的 kubeconfig 路徑。如果尚未為 API 伺服器產生 kubeconfig 檔案,請參閱登入瞭解詳情。SUBJECT_NAMESPACE:標準叢集中的主體命名空間。SUBJECT_LABEL_KEY:用於選取主體工作負載的標籤鍵。例如app、tier或role。SUBJECT_LABEL_VALUE:與SUBJECT_LABEL_KEY相關聯的值。舉例來說,如果SUBJECT_LABEL_KEY為app,且SUBJECT_LABEL_VALUE為backend,則具有app: backend標籤的工作負載會傳送流量。EXTERNAL_CIDR:外部 CIDR,例如:20.0.0.0/16。PORT:允許流量傳輸的外部端點通訊埠。
建立允許所有要求的政策
您可以使用下列政策明確允許所有流量。這樣一來,您就能與其他標準和共用叢集的端點通訊。
建立允許所有連入流量的政策
如要允許所有傳入流量,請建立並套用下列資源:
kubectl --kubeconfig CLUSTER_API_SERVER apply -f - <<EOF apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: allow-all-ingress-traffic namespace: SUBJECT_NAMESPACE spec: podSelector: {} policyTypes: - Ingress ingress: - {} EOF更改下列內容:
CLUSTER_API_SERVER:叢集 API 伺服器的 kubeconfig 路徑。如果尚未為 API 伺服器產生 kubeconfig 檔案,請參閱登入瞭解詳情。SUBJECT_NAMESPACE:標準叢集中的主體命名空間。
建立允許所有輸出的政策
如要允許所有傳出流量,請建立並套用下列資源:
kubectl --kubeconfig CLUSTER_API_SERVER apply -f - <<EOF apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: allow-all-egress-traffic namespace: SUBJECT_NAMESPACE spec: podSelector: {} policyTypes: - Egress egress: - {} EOF更改下列內容:
CLUSTER_API_SERVER:叢集 API 伺服器的 kubeconfig 路徑。如果尚未為 API 伺服器產生 kubeconfig 檔案,請參閱登入瞭解詳情。SUBJECT_NAMESPACE:標準叢集中的主體命名空間。