인프런 커뮤니티 질문&답변

유재혁님의 프로필 이미지

작성한 질문수

그림으로 배우는 쿠버네티스(v1.30) - {{ x86-64, arm64 }}

Kubernetes Networkpolicy 관련 질문입니다.

작성

·

217

0

안녕하세요 강의를 수강중인 수강생입니다.

Kubernetes NetworkPolicy 관련 질문이 있습니다.

강의에서는 NetworkPolicy를 .yaml 파일을 1개로 설정하시고 테스트 하셨는데

NetworkPolicy rule을 2개의 .yaml 파일로 나눠서 적용해도 2개의 rule들이 하나의 pod에서 같이 적용이 가능할까요?

예를 들면) 아래와 같이 적용을 했을 때, role: web pod는 외부로 80과 53의 두가지의 Rule을 모두 적용이 가능 한건지 궁금합니다.

a.yaml -> role: web 이라는 tag를 가진 pod에 egress 0.0.0.0/0 tcp 80

a2.yaml -> role: web 이라는 tag를 가진 pod에 egress 0.0.0.0/0 udp 53

제가 테스트 했을 때는, 안되었는데 혹시 파일을 나눠서 적용 하고 싶다면 다른 방법이 있을까요?

답변 1

1

조훈(Hoon Jo)님의 프로필 이미지
조훈(Hoon Jo)
지식공유자

안녕하세요

정확히 어떤 의도인지 파악하진 못했는데, 아마 CSP 같은 환경을 만들기 위해서 보고 계신거 같습니다.

그리고 UDP까지는 필요하지 않아서 TCP로 아래와 같이 테스트한 결과 위의 내용이 적용 가능합니다.

아마 어딘가 테스트를 다르게 진행하신거 같습니다.

사용 deployment

[root@m-k8s 8.6]# cat 1-1-deploy-deny-all.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    role: sensitive  
    app: chk-info
  name: deploy-deny-all
<생략>

8080 netpol 적용

[root@m-k8s 8.6]# cat 8080.yaml 
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: 8080port
  namespace: default
spec:
  podSelector:
    matchLabels:
      role: sensitive 
  policyTypes:
  - Ingress
  - Egress
  ingress:
    - ports:
        - protocol: TCP
          port: 8080
  egress:
  - {}

 

8080 적용 후 curl 안됨

[root@m-k8s 8.6]# ka 8080.yaml 
networkpolicy.networking.k8s.io/8080port created
[root@m-k8s 8.6]# curl 192.168.1.11
^C

 

80 적용 후 curl이 됨

[root@m-k8s 8.6]# cat 80.yaml 
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: 80port
  namespace: default
spec:
  podSelector:
    matchLabels:
      role: sensitive 
  policyTypes:
  - Ingress
  - Egress
  ingress:
    - ports:
        - protocol: TCP
          port: 80
  egress:
  - {}
[root@m-k8s 8.6]# ka 80.yaml 
networkpolicy.networking.k8s.io/80port created
[root@m-k8s 8.6]# curl 192.168.1.11
<!DOCTYPE html>
<html>
    <head>
        <title>Check NGINX Information</title>
<생략>

[root@m-k8s 8.6]# k get netpol
NAME       POD-SELECTOR     AGE
8080port   role=sensitive   2m43s
80port     role=sensitive   67s

 

해당 내용을 참고로 다시 진행해 보시면 좋으실 것 같습니다.

도움이 되시길 바랍니다.

 

유재혁님의 프로필 이미지
유재혁
질문자

아 제가 테스트를 잘못 한 것 같네요 ^^;; 다시 확인해보니 잘 됩니다. 확인해 주셔서 감사합니다~

아 하나만 더 여쭤 보면,,, TCP or UDP 말고 프로토콜로 ICMP를 허용 할 수 있는 방법은 있을까요? TCP를 Ingress로 열어놓으면 ICMP가 안되더라구요..ㅠㅠ

조훈(Hoon Jo)님의 프로필 이미지
조훈(Hoon Jo)
지식공유자

우선 교육 범위가 아니라 구현에 필요한 모든 사항에 답변드리기 어려운 점에 대해서 이해를 구합니다. 연속성이 있고 이미 질의된 질문에 이번에는 예외적으로 답변드리는게 좋을꺼 같아서 드리면...

아마 아시겠지만 networkpolicy에는 TCP UDP 외에는 다른 프로토콜은 아직 구현되어 있지 않습니다. 아마 앞으로도 여기 계속 feature가 추가되기 보다는 CRD로 따로 구현될 것으로 예상됩니다. 주로 CNI쪽에서 제공될꺼 같으며, 다음의 내용을 참고하시면 도움이 되실 것 같습니다.

https://docs.tigera.io/calico/latest/network-policy/policy-rules/icmp-ping

조훈(Hoon Jo)님의 프로필 이미지
조훈(Hoon Jo)
지식공유자

그리고 아마 아시겠지만...

ICMP는 IP 데이터그램을 사용하지만, 메시지는 TCP/IP 에 의해 처리됩니다. 고로 TCP를 사용합니다.