Kubernetes의 애플리케이션을 위한 방화벽
이 블로그에서는 클러스터에서 실행되는 애플리케이션의 보안을 개선하기 위한 kubernetes 기능을 살펴보겠습니다.
kubernetes 클러스터에서는 각 애플리케이션에 대해 여러 복제본을 사용하여 많은 애플리케이션을 실행할 수 있습니다. 기본적으로 모든 포드는 동일한 클러스터에서 실행 중인 다른 포드와 통신할 수 있습니다.
그러나 그러한 기능을 허용하지 않는 것이 좋습니다. 침입자가 포드에 액세스할 수 있는 경우 침입자는 손상된 포드 내부에서 모든 포드에 액세스할 수 있습니다. 따라서 클러스터 내에서 트래픽(수신 및 송신 모두)을 허용할지 또는 거부할지 결정할 수 있는 애플리케이션용 방화벽이 필요합니다.
kubernetes 클러스터에서 실행되는 애플리케이션을 위한 방화벽을 만드는 데 도움이 되는 구세주
Network Policy
가 등장합니다.이러한 방화벽의 필요성과 몇 가지 예를 통해 네트워크 정책이 어떻게 도움이 되는지 이해해 봅시다.
방명록
다음과 같이 3개의 다른 구성 요소가 있는 응용 프로그램
Guestbook
을 고려하십시오.이러한 구성 요소 간에 예상되는 통신은 ui가 api와 통신하고 api가 db와 통신하는 것과 같습니다.
그러나 방명록 응용 프로그램의 이러한 모든 구성 요소가 kubernetes 클러스터에서 실행될 때 기술적으로 ui 구성 요소는 기본적으로 db와 통신할 수 있습니다.
네트워크 정책을 사용하여 클러스터의 애플리케이션에 대한 방화벽 설정
As network policy is a feature that should be implemented by the network plugin, ensure that your network plugin supports NetworkPolicy resource. Creating NetworkPolicy resource without such plugin will have no effect. Calico, Cilium, Kube-router, Romana and Weave Net are some of the network plugins that support network policy
첫 번째 단계로 모든 네임스페이스에서 다음과 같이 네트워크 정책을 생성하여 kubernetes 클러스터에서 실행 중인 모든 포드 간의 모든 통신을 허용하는 기본 동작을 비활성화합니다.
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: deny-all
spec:
podSelector: {}
ingress: {}
이제 어떤 포드도 kubernetes 클러스터에서 실행 중인 다른 포드와 통신할 수 없습니다. 이제 요구 사항에 따라 클러스터의 포드에 대한 수신/발신 트래픽을 허용합니다.
방명록 애플리케이션의 경우
guestbook-api
팟으로의 수신 트래픽을 허용하고 guestbook-ui
팟에서만 수신 트래픽을 허용하려면 다음과 같이 네트워크 정책을 생성하십시오.apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-ui-to-api
spec:
podSelector:
matchLabels:
app: guestbook-api
tier: backend
ingress:
- from:
podSelector:
matchLabels:
app: guestbook-ui
tier: frontend
그리고
guestbook-db
포드로의 인그레스 트래픽을 허용하고 guestbook-api
포드에서만 허용하려면 다음과 같이 네트워크 정책을 생성합니다.apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-api-to-db
spec:
podSelector:
matchLabels:
app: guestbook-db
tier: db
ingress:
- from:
podSelector:
matchLabels:
app: guestbook-api
tier: backend
이러한 네트워크 정책을 사용한 최종 설정은 포드 간의 유효한 통신만 허용합니다.
네트워크 정책에 대해 자세히 알아보기
네임스페이스 선택기
일부 시나리오에서는 네임스페이스의 모든 포드에서 수신을 허용해야 합니다. 예를 들어 모든 애플리케이션 포드는
monitoring
네임스페이스에 있는 모든 포드의 수신을 허용해야 합니다. 네임스페이스 선택기를 사용하여 다음과 같이 이 설정을 쉽게 수행할 수 있습니다.apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-monitoring-namespace
spec:
podSelector: {} ## applies to all pods in the namespace
ingress:
- from:
namespaceSelector:
matchLabels:
team: monitoring ## labels of the monitoring namespace
IP 차단
레이블뿐만 아니라 네트워크 정책에서도 IP 블록을 사용하여 구성할 수 있습니다. 다음 네트워크 정책은 10.72.X.X에서 수신을 허용하지만 10.72.10.X에서 트래픽을 차단합니다.
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-using-ip
spec:
podSelector: {}
ingress:
- from:
ipBlock:
cidr: 10.72.0.0/16
except: 10.72.10.0/8
결론
k8s 클러스터의 모든 수준에서 보안을 유지하는 것이 좋습니다. kubernetes 클러스터의 애플리케이션 포드에 대한 방화벽을 추가하면 공격 표면을 줄여 보안 수준을 높일 수 있으므로 적극 권장됩니다.
Reference
이 문제에 관하여(Kubernetes의 애플리케이션을 위한 방화벽), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/prabhujayakumar/firewall-for-applications-in-kubernetes-59bi텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)