관리자는 Kubernetes 네트워크 내부에 HTTPS를 적용해야 합니까, 아니면 (수신을 통한) 외부 트래픽에만 적용해야 합니까?

관리자는 Kubernetes 네트워크 내부에 HTTPS를 적용해야 합니까, 아니면 (수신을 통한) 외부 트래픽에만 적용해야 합니까?

마이크로서비스 시나리오에서 각 web-api 컨테이너는 HTTPS를 통해 자체적으로 서비스를 제공해야 합니까? 아니면 내부적으로 HTTP를 통해 작업하고 모든 수신을 인증서로 구성하고 컨테이너의 포트 80으로 리디렉션해도 괜찮습니까?

가장 쉬운 접근 방식은 외부 트래픽만 보호하는 것입니다. 왜냐하면 Asp.Net Core WebAPI가 HTTPS를 통해 자체(kestrel)를 제공하도록 구성하려면 인증서를 볼륨에 탑재하고 인증서 암호를 제공해야 하기 때문입니다. 조금 복잡합니다.

모범 사례는 무엇입니까?

답변1

온프레미스 또는 베어메탈 등이 있는 경우 요구 사항 및 리소스에 따라 다릅니다.

트래픽 보안 요구 사항 없음

클러스터 내부의 클라이언트 트래픽 보안과 관련된 요구 사항이 없는 경우 클라이언트 SSL연결을 종료 ingress-controller하고 HTTPPod 간을 사용할 수 있습니다.

보안 요구 사항

대상 포드에 대한 클라이언트 트래픽을 보호해야 하는 경우 두 가지 방법으로 확보할 수 있습니다.

  • L3 LoadBalancer~와 함께노드포트, 다음으로 구성됨SSL 패스트로트Ingress.
  • 트래픽을 사용해야 하지만 지정된 대상으로 직접 SSL전달할 필요는 없는 경우 구성하여 구현하는 것이 더 쉬울 것입니다.SSLPod이스티오. mTLS​이 옵션을 사용하면 HTTP 헤더를 사용하여 트래픽을 라우팅할 수 있으며 인증서를 수동으로 관리할 필요가 없습니다. 확인해주십시오이것자세한 내용은.

모범 사례는 항상 최대한 안전한 경향이 있으므로 항상 보안 연결을 사용하는 것이 좋습니다. 그럼에도 불구하고 일부 시나리오에서는 이것이 필요하지 않습니다.

답변2

클러스터가 클라우드에서 실행 중이고외부 클라우드 밸런서, 수신 및 포드가 다른 머신이나 데이터 센터에 있을 수 있습니다. 이 경우 실제로 수신에서 포드까지 TLS를 적용해야 합니다.

어떤 경우든 로드 밸런서와 클러스터는 동일한(제한되기를 바랍니다) VPC에 있어야 합니다.

답변3

또한 보호하려는 공격 벡터에 따라 달라집니다.

누군가가 Kubernetes 노드 사이의 트래픽을 스니핑할 수 있다고 걱정된다면 WeaveNet과 같은 암호화를 지원하는 네트워크 플러그인(CNI)을 사용하는 것을 고려하거나 Wireguard 또는 OpenVPN을 사용하여 VPN 네트워크에 모든 노드를 배치할 수 있습니다.

클러스터의 서비스를 서로 보호하려면 Pod 간의 트래픽을 암호화하는 Istio와 같은 것을 고려해야 합니다.

관련 정보