[k8s] 개발자가 꼭 알아야 할 k8s DNS, iptable 업데이트 타이밍
위 글을 보고 정리한 글
Kubernetes의 Service는 클러스터 내에서 pod들을 하나의 논리적 그룹으로 묶어 일정한 네트워크 정책과 엔드포인트를 제공하는 오브젝트입니다. 아래에 Service의 역할, 사용 사례, 그리고 사용하는 경우에 대해 자세히 설명합니다.
안정적인 네트워크 접속점 제공:
pod들은 동적으로 생성되고 사라지며 IP 주소가 변경될 수 있습니다. Service는 이러한 변화에도 불구하고 일정한 IP 주소와 DNS 이름을 제공하여 클라이언트가 pod에 안정적으로 접근할 수 있도록 합니다.
로드 밸런싱:
Service는 여러 pod로의 트래픽을 자동으로 분산시켜 부하를 균등하게 처리할 수 있도록 합니다. 이로 인해 단일 pod에 과부하가 걸리는 것을 방지하고, 애플리케이션의 가용성을 높입니다.
서비스 디스커버리:
Kubernetes 내부의 DNS 시스템과 연동되어, Service 이름으로 접근할 수 있도록 합니다. 이를 통해 다른 애플리케이션이나 마이크로서비스가 해당 Service를 쉽게 찾고 통신할 수 있습니다.
네트워크 정책 적용:
Service는 pod들에 대한 접근 제어와 네트워크 정책을 적용할 수 있는 단위로 작용하며, 보안적인 측면에서도 중요한 역할을 합니다.
Kubernetes에서는 다양한 종류의 Service를 제공하며, 각각의 상황에 맞게 사용됩니다.
ClusterIP (기본 타입):
NodePort:
LoadBalancer:
ExternalName:
동적인 pod 관리:
Deployment나 ReplicaSet을 통해 생성된 pod들이 동적으로 변동하는 경우, 외부 클라이언트나 다른 내부 서비스가 안정적으로 이들에 접근하기 위해 Service를 사용합니다.
로드 분산 필요:
여러 인스턴스의 pod들 사이에 트래픽을 균등하게 분산시켜야 할 때, Service는 내장된 로드 밸런싱 기능을 제공하여 이를 해결합니다.
서비스 디스커버리 및 DNS:
복잡한 마이크로서비스 아키텍처에서는 각 서비스가 다른 서비스의 위치를 알아야 합니다. Service는 클러스터 내부 DNS 이름을 통해 이를 쉽게 관리할 수 있게 도와줍니다.
보안 및 네트워크 정책:
네트워크 접근을 제어하거나 특정 서비스에 대한 정책을 적용할 때 Service는 중요한 관리 단위로 사용됩니다.
결론적으로, Kubernetes Service는 pod의 동적 특성을 보완하고, 안정적인 네트워크 연결 및 트래픽 분산, 그리고 서비스 디스커버리 등의 다양한 기능을 제공하는 핵심적인 컴포넌트입니다. 이러한 기능 덕분에 마이크로서비스 아키텍처에서 복잡한 네트워크 통신을 효율적으로 관리할 수 있습니다.