network policy

GisangLee·2024년 8월 23일
0

k8d

목록 보기
33/36

개념

IP 주소 또는 포트 수준(OSI 계층 3 또는 4)에서 트래픽 흐름을 제어하려는 경우, 클러스터의 특정 애플리케이션에 대해 쿠버네티스 네트워크폴리시(NetworkPolicy) 사용을 고려할 수 있다.

예시

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: test
  namespace: default
spec:
  podSelector:
    matchLabels:
      service: msaB
  policyTypes:
  - Ingress
  - Egress
  ingress:
  - from:
    - ipBlock:
        cidr: 172.17.0.0/16
        except:
        - 172.17.1.0/24
    - namespaceSelector:
        matchLabels:
          role: A-product
    - podSelector:
        matchLabels:
          service: msaA
    ports:
    - protocol: TCP
      port: 8080
  egress:
  - to:
    - ipBlock:
        cidr: 10.0.0.0/24
    ports:
    - protocol: TCP
      port: 5978

Pod, Namespace, IPBlock의 3가지 타입으로 제어 가능


podSelector

  • NetworkPolicy가 적용될 파드
    • matchLabels로 service: msaB 레이블을 가진 파드들에 이 NetworkPolicy가 적용된다.
  • 이 항목을 {}로 비우면 Namespace내의 모든 파드에 적용

policyTypes

  • 적용될 트래픽 방향을 설정
  • 기본이 Ingress ( Inbound ).
    • 안적어놓더라도 아래 egress 항목을 작성하면 자동으로 Egress도 추가된다.
    • 이 항목이 굳이 있는 이유는 Ingress나 Egress를 안적어 놓으면 모든 트래픽을 거부할 수 있기 때문
  • 반대로 Ingress나 Egress에 {}로 비워놓으면, 모든 트래픽을 허용

ipBlock

  • CIDR 표기법으로 표시된 위 파일은 172.17.0.0/16 대역의 IP를 허용하나, 172.17.1.0/24 범위의 IP는 제한한다.
    • 즉, 172.17.0.0 ~ 172.17.255.255까지를 허용하지만 172.17.1.0 ~ 172.17.1.255는 트래픽 허용을 하지않는다.

namespaceSelector, podSelector

  ingress:
  - from:
    - ipBlock:
        cidr: 172.17.0.0/16
        except:
        - 172.17.1.0/24
    - namespaceSelector:
        matchLabels:
          role: A-product
    - podSelector:
        matchLabels:
          service: msaA
$ k get ns --show-labels
NAME                          STATUS   AGE   LABELS
A-product                    Active   1d   role=A-product
B-product                    Active   1d   <none>
$ k get po --show-labels
NAME                        READY   STATUS    RESTARTS   AGE   LABELS
msaA                       1/1     Running   0          1d   service=msaA
msaB                       1/1     Running   0          1d   service=msaB

네임스페이스 기준으로는 A-product 네임스페이스에 속하는 모든 pod의 트래픽을 허용할 것이고
파드 기준으로는 msaA 파드로부터의 트래픽을 허용할 것이다.

OR

- namespaceSelector:
    matchLabels:
      role: A-product
- podSelector:
    matchLabels:
      service: msaA

AND

- namespaceSelector:
    matchLabels:
      role: A-product
  podSelector:
    matchLabels:
      service: msaA

profile
포폴 및 이력서 : https://gisanglee.github.io/web-porfolio/

0개의 댓글

관련 채용 정보