構成は一般的なアプリケーションサーバの構成。
ingress(ALB ingress Controllerで生成) – AppPod – DBPOD
まず、Ingress、Egressの両方のアクセスをブロック。
この際にnamespaceを指定しているため、このnamespaceのみ作用される。
1 2 3 4 5 6 7 8 9 10 |
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: deny-all namespace: test-20210401-01 spec: podSelector: {} policyTypes: - Ingress - Egress |
ingressからAppPodへの通信を許可するための設定。
fromでは、ingressが配置されるサブネットのCIDRブロックを指定。
egressでは、DBPODへの通信を許可する設定をいれている。
ちなみに、この場合はnamespaceとpodのlabelを両方チェックする。and条件のようなもの。
「 podSelector:」の前に「-」を入れないと、and条件になる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: allow-app-from-ingress namespace: test-20210401-01 spec: podSelector: matchLabels: app: test-20210401-01-app policyTypes: - Ingress - Egress ingress: - from: - ipBlock: cidr: 10.4.0.0/16 - namespaceSelector: matchLabels: project: test namespace: test-20210401-01 egress: - to: - namespaceSelector: matchLabels: namespace: test-20210401-01 podSelector: matchLabels: app: test-20210401-01-db |
AppPODからDBPODへの通信許可設定。
PodSelectorでDBPODを指定して、ingress,egressそれぞれにAPPPODへの通信許可設定を入れている。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: allow-db-from-app namespace: test-20210401-01 spec: podSelector: matchLabels: app: test-20210401-01-db policyTypes: - Ingress - Egress ingress: - from: - namespaceSelector: matchLabels: namespace: test-20210401-01 podSelector: matchLabels: app: test-20210401-01-app egress: - to: - namespaceSelector: matchLabels: namespace: test-20210401-01 podSelector: matchLabels: app: test-20210401-01-app |
展開したあと
1 2 3 4 5 |
⋊> /h/A/kubernetes on master ◦ kubectl get networkpolicy -A 04:01:47 NAMESPACE NAME POD-SELECTOR AGE test-20210401-01 allow-app-from-ingress app=test-20210401-01-app 5s test-20210401-01 allow-db-from-app app=test-20210401-01-db 8s test-20210401-01 deny-all <none> 12s |
lable selectorでingressを指定することはできないため、ipBlocksで無理やり指定する必要がある模様。