쿠버네티스 네트워크 정책(NetworkPolicy) 개념 및 설정

ZER0·2022년 11월 6일
0

Kubernetes

목록 보기
30/39
post-thumbnail

1. 개념

  • 쿠버네티스에서 각 파드는 기본적으로 서로간에 모든 통신이 가능한 상태
  • 때문에 DB처럼 보안적으로 중요한 파드에 대해 접근을 제어하기 위하여 NetworkPolicy 서비스 활용
  • 파드 생성 시 labels에 명시한 key : value를 기준으로 NetworkPolicy 적용

2. NetworkPolicy 상황별 설정

  • NetworkPolicy를 설정하지 않은 경우 모든 파드에서 DB로 접근 가능
  • 특정 파드에서만 접근을 허용하고자 하는 경우
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    apiVersion: networking.k8s.io/v1
     
    kind: NetworkPolicy
     
    metadata:
      name: db-policy
      namespace: prod
     
    spec:
      podSelector:
        matchLabels:
          role: db
      policyTypes:
        - Ingress
      ingress:
        - from:
            - podSelector:
                matchLabels:
                  role: api-pod
          ports:
            - protocol: TCP
              port: 3306
    cs
  • 특정 네임스페이스의 특정 파드에서만 접근을 허용하고자 하는 경우
    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
    apiVersion: networking.k8s.io/v1
     
    kind: NetworkPolicy
     
    metadata:
      name: db-policy
      namespace: prod
     
    spec:
      podSelector:
        matchLabels:
          role: db
      policyTypes:
        - Ingress
      ingress:
        - from:
            - podSelector:
                matchLabels:
                  role: api-pod
              namespaceSelector:
                matchLabels:
                  name: dev
          ports:
            - protocol: TCP
              port: 3306
    cs
  • 특정 네임스페이스의 모든 파드에서 접근을 허용하고자 하는 경우
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    apiVersion: networking.k8s.io/v1
     
    kind: NetworkPolicy
     
    metadata:
      name: db-policy
      namespace: prod
     
    spec:
      podSelector:
        matchLabels:
          role: db
      policyTypes:
        - Ingress
      ingress:
        - from:
            - namespaceSelector:
                matchLabels:
                  name: dev          
          ports:
            - protocol: TCP
              port: 3306
    cs
  • 클러스터 외부의 특정 서버로부터 접근을 허용하고자 하는 경우
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    apiVersion: networking.k8s.io/v1
     
    kind: NetworkPolicy
     
    metadata:
      name: db-policy
      namespace: prod
     
    spec:
      podSelector:
        matchLabels:
          role: db
      policyTypes:
        - Ingress
      ingress:
        - from:        
          - ipBlock:
              cidr: 192.168.1.100/32   
          ports:
            - protocol: TCP
              port: 3306
    cs
  • DB에서 특정 파드로 접근을 허용하고자 하는 경우
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    apiVersion: networking.k8s.io/v1
     
    kind: NetworkPolicy
     
    metadata:
      name: db-policy
      namespace: prod
     
    spec:
      podSelector:
        matchLabels:
          role: db
      policyTypes:
        - Egress
      egress:
        - to:        
            - podSelector:
                matchLabels:
                  role: etc-pod
          ports:
            - protocol: TCP
              port: 8080
    cs
  • DB에서 클러스터 외부의 특정 서버로 접근을 허용하고자 하는 경우
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    apiVersion: networking.k8s.io/v1
     
    kind: NetworkPolicy
     
    metadata:
      name: db-policy
      namespace: prod
     
    spec:
      podSelector:
        matchLabels:
          role: db
      policyTypes:
        - Egress
      egress:
        - to:        
            - ipBlock:
                cidr: 192.168.1.100/32
          ports:
            - protocol: TCP
              port: 8080
    cs

3. NetworkPolicy 확인

  • NetworkPolicy 목록 확인 kubectl get networkpolicies
  • NetworkPolicy 정보 확인 kubectl describe networkpolicies [NetworkPolicy_이름]

참고

  1. https://www.udemy.com/course/certified-kubernetes-administrator-with-practice-tests/
profile
Security Compliance Engineer

0개의 댓글