ACK One 登録済みクラスターのネットワークポリシーを使用すると、IP アドレスまたはポートレベルで特定のアプリケーションのネットワークトラフィックを制御できます。このトピックでは、登録済みクラスターでネットワークポリシーを使用する方法と、一般的なユースケースの概要を説明します。
前提条件
-
バージョン 1.20.0 以降を実行している自己管理型 Kubernetes クラスター。
-
ACK One 登録済みクラスターを作成し、自己管理型 Kubernetes クラスターを ACK One 登録済みクラスターに接続していること。詳細については、「ACK One 登録済みクラスターの作成」をご参照ください。
注意事項
-
ネットワークポリシー機能は、ACK One 登録済みクラスター内の Elastic Container Instance (ECI) Pod でのみサポートされています。
-
ネットワークポリシーは IPv6 アドレスをサポートしていません。
-
ネットワークポリシーは
endPortフィールドをサポートしていません。 -
ネットワークポリシールールでは
labelSelectorを使用して名前空間または Pod を選択できますが、ポリシーの数が多いとルールの適用が遅れ、クラスター管理が複雑になる可能性があります。そのため、クラスター内で使用するネットワークポリシーは 100 未満にすることを推奨します。
ステップ1:ネットワークポリシーの有効化
-
Poseidon コンポーネントをインストールします。
ACK コンソールにログインします。左側のナビゲーションウィンドウで、クラスターリスト をクリックします。
クラスターリスト ページで、目的のクラスターの名前をクリックします。 左側のナビゲーションウィンドウで、[コンポーネントとアドオン] をクリックします。
-
アドオン管理 ページで、ネットワーク タブをクリックします。[Poseidon] カードで、インストール をクリックします。
-
[Poseidon のインストール] パネルで、ECI インスタンスにネットワークポリシーを有効化する を選択し、OK をクリックします。
-
ack-virtual-node コンポーネントをインストールします。
-
アドオン管理 ページで、コアコンポーネント タブをクリックします。ack-virtual-node カードで、インストール をクリックします。
-
[ack-virtual-node のインストール] パネルで、ネットワーク構成に基づいて VPC イントラネットアクセスを有効にするかどうか を選択または選択解除し、次に OK をクリックします。
コンポーネントがインストールされると、カードの右上に インストール済み ステータスが表示されます。
説明[ack-virtual-node] コンポーネントがすでにインストールされている場合は、バージョン 2.10.0 以降にアップグレードしてください。詳細については、「コンポーネントの管理」をご参照ください。
-
ステップ2:ネットワークポリシーの使用
-
次のコマンドを実行して、ネットワークポリシーを作成します。このポリシーは
default名前空間に適用され、app: busyboxラベルを持つ Pod が TCP ポート 80 でapp: nginxラベルを持つ Pod にトラフィックを送信することを許可します。他のポリシーで許可されていない限り、nginxPod への他のすべてのトラフィックは拒否されます。kubectl apply -f - <<EOF apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: test-network-policy namespace: default spec: podSelector: matchLabels: app: nginx policyTypes: - Ingress ingress: - from: - podSelector: matchLabels: app: busybox ports: - protocol: TCP port: 80 EOF -
次のコマンドを実行して、
app: nginxラベルを持つアプリケーションを作成します。kubectl apply -f - <<EOF apiVersion: apps/v1 kind: Deployment metadata: labels: app: nginx name: nginx-deployment namespace: default spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: alibabacloud.com/eci: 'true' app: nginx spec: containers: - image: 'registry.cn-hangzhou.aliyuncs.com/eci_open/nginx:1.14.2' imagePullPolicy: IfNotPresent name: nginx ports: - containerPort: 80 protocol: TCP resources: limits: cpu: 500m EOF -
次のコマンドを実行して Nginx アプリケーションのステータスを確認し、Pod の IP アドレスを記録します。
kubectl get pod -owide | grep nginx-deployment予想される出力:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx-deployment-698d746d4c-nXXXXXXx 1/1 Running 0 35s 192.168.XXX.XXX cn-heyuan.10.108.XX.XX <none> <none> -
次のコマンドを実行して、
app: busyboxラベルを持つアプリケーションを作成します。kubectl apply -f - <<EOF apiVersion: apps/v1 kind: Deployment metadata: labels: app: busybox name: busybox-deployment namespace: default spec: replicas: 1 selector: matchLabels: app: busybox template: metadata: labels: alibabacloud.com/eci: 'true' app: busybox spec: containers: - args: - '-c' - ' sleep 360000000' command: - /bin/sh image: 'registry-cn-hangzhou.ack.aliyuncs.com/dev/busybox:1' imagePullPolicy: IfNotPresent name: busybox ports: - containerPort: 80 protocol: TCP resources: limits: cpu: 500m EOF -
busybox コンテナにログインし、次のコマンドを実行して Nginx Pod の IP アドレスにアクセスします。
wget http://192.168.XXX.XXX予想される出力:
Connecting to 192.168.XXX.XXX:80... connected. HTTP request sent, awaiting response... 200 OK Length: 612 [text/html] Saving to: 'index.html' index.html 100%[================================================================================================================================>] 612 --.-KB/s in 0s 2024-11-19 20:12:09 (1.66 MB/s) - 'index.html' saved [612/612]100% の進捗は、Nginx サービスにアクセス可能であることを示します。
-
次のコマンドを実行して、
app: busybox-demoラベルを持つアプリケーションを作成します。kubectl apply -f - <<EOF apiVersion: apps/v1 kind: Deployment metadata: labels: app: busybox-demo name: busybox-deployment-demo namespace: default spec: replicas: 1 selector: matchLabels: app: busybox-demo template: metadata: labels: alibabacloud.com/eci: 'true' app: busybox-demo spec: containers: - args: - '-c' - ' sleep 360000000' command: - /bin/sh image: 'registry-cn-hangzhou.ack.aliyuncs.com/dev/busybox:1' imagePullPolicy: IfNotPresent name: busybox-demo ports: - containerPort: 80 protocol: TCP resources: limits: cpu: 500m EOF -
busybox-demo コンテナにログインし、次のコマンドを実行して Nginx Pod の IP アドレスにアクセスします。
wget http://192.168.XXX.XXX予想される出力:
Connecting to 192.168.XXX.XXX:80... failed: Connection timed out.接続タイムアウトは、ネットワークポリシーが期待どおりに機能していることを示します。