構成は一般的なアプリケーションサーバの構成。
ingress(ALB ingress Controllerで生成) – AppPod – DBPOD
まず、Ingress、Egressの両方のアクセスをブロック。
この際にnamespaceを指定しているため、このnamespaceのみ作用される。
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条件になる。
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への通信許可設定を入れている。
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
展開したあと
⋊> /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で無理やり指定する必要がある模様。
