kubernetes

k8s network policy

misankim 2023. 3. 10. 19:04

network policy

 

 

k8s network policy 가이드

https://kubernetes.io/ko/docs/concepts/services-networking/network-policies/

 

gke network plicy 가이드

https://cloud.google.com/kubernetes-engine/docs/tutorials/network-policy?hl=ko

 

 

# 정책 예제

 

"kubernetes.io/metadata.name: privacy" 레이블을 가진 네임스페이스의 "app: privacy" 레이블을 가진 파드 -> my-flask-app 네임스페이스의 "app: my-flask-app" 레이블을 가진 파드로 액세스 가능하도록 설정

 

-> 해당 파드에 적용되면서 policyTypes에 "Ingress"가 있는 NetworkPolicy가 존재하는 경우, 파드가 인그레스에 대해 격리된다.(network policy 에 의해 허용된 파드를 제외하고는 통신 불가해짐)

-> 파드는 자신에 대한 접근을 차단할 수 없음

-> 특정 파드의 특정 방향에 대해 하나 또는 여러 개의 폴리시가 적용되면, 해당 파드의 해당 방향에 대해 허용된 연결은 모든 폴리시가 허용하는 연결의 합집합이다.

 

 

kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
  name: my-flask-app
  namespace: my-flask-app
spec:
  policyTypes:
  - Ingress
  podSelector:
    matchLabels:
      app: my-flask-app
  ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          kubernetes.io/metadata.name: privacy
      podSelector:
        matchLabels:
          app: privacy

 

kubectl get networkpolicy

kubectl get netpol

 

 

# sentry clickhouse 정책 예제

 

kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
  name: sentry-clickhouse
  namespace: sentry
spec:
  policyTypes:
  - Ingress
  podSelector:
    matchLabels:
      app.kubernetes.io/name: clickhouse
  ingress:
  - from:
    - podSelector:
        matchLabels:
          app.kubernetes.io/name: clickhouse
    - podSelector:
        matchLabels:
          app.kubernetes.io/name: zookeeper-clickhouse
    - podSelector:
        matchExpressions:
          - key: role
            operator: In
            values:
            - snuba-api
            - snuba-consumer
            - snuba-transactions-consumer
            - snuba-outcomes-consumer
            - sessions-consumer
            - snuba-replacer
    - podSelector:
        matchExpressions:
          - key: job-name
            operator: Exists