0
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

求ム!Cloud Nativeアプリケーション開発のTips!【PR】日本マイクロソフト Advent Calendar 2020 の23日目の記事です。

Kubernetesのデフォルトでは、Namespace間の通信は全て許可されています。
Namespace毎に異なるワークロードを動かしていた場合、アクセス制御を掛けたいシーンがあると思いAKS上(Azure Network Policy)で実現可能か試してみました。

Azure Kubernetes Service (AKS) のネットワーク ポリシーを使用したポッド間のトラフィックの保護 に手順がありますが、独自に検証したものやハマったポイントなどを書き残します。

AKS作成

こちら にAzure CLIでAKSを作成するコマンドがありますのでそれに倣って作成します。
ここで注意すべきは、作成したvNetのIAMでAKS ServicePrincipalに対して共同作成者ロールを割り当てることです。
これをやっておかないとNetworkPolicyが反応しませんでした。
Azure Portalから作った場合は忘れずに設定しないといけないです。

Network Policy設定

今回はproduction Namespaceに、他のNamespaceからアクセスできないように設定してみます。

  • テスト用Namespaceを作ります。
# kubectl create ns production
# kubectl label namespace/production env=production
# kubectl create ns development
# kubectl label namespace/development env=development
  • NginxをProductionに作ります。
# kubectl create deployment nginx --image=nginx -n production
# kubectl expose deployment nginx --port=80 -n production
# kubectl get all -n production
  • テスト用のPodをProduction Namespaceに作ります。remote file existsが出れば疎通できています。
# kubectl run busybox --rm -ti --image=busybox -n production -- /bin/sh
/ # wget --spider --timeout=1 nginx
remote file exists
/ # exit
  • テスト用のPodをDevelopment Namespaceに作ります。まだNetworkPolicyを当ててないので疎通できます。
# kubectl run busybox --rm -ti --image=busybox -n development -- /bin/sh
/ # wget --spider --timeout=1 nginx.production
remote file exists
/ # exit
  • network-policy.yamlを作成します。
network-policy.yaml
kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
  name: network-policy
  namespace: production
spec:
  podSelector: {}
  ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          env: production
  • Production Namespaceに適用します。
# kubectl apply -f network-policy.yaml
  • テスト用のPodをDevelopment Namespaceに作ります。timeoutになるはずです。
# kubectl run busybox --rm -ti --image=busybox -n development -- /bin/sh
/ # wget --spider --timeout=1 nginx.production
wget: download timed out
/ # exit
  • テスト用のPodをProduction Namespaceに作ります。同じNamespace内では疎通できるはずです。
# kubectl run busybox --rm -ti --image=busybox -n production -- /bin/sh
/ # wget --spider --timeout=1 nginx
remote file exists
/ # exit
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
0
Help us understand the problem. What are the problem?