네트워크 경로는
Network Poilicy와
kubeproxy를 잘 분석해야 한다.
Services, Load Balancing, and Networking
쿠버네티스 네트워크 모델
1. Kubernetes imposes the following fundamental requirements on any networking implementation (barring any intentional network segmentation policies):
쿠버네티스는 발생하는 모든 내트워크에 대해 아래와 같은 네트워크 요구사항을 부가한다.
- pods can communicate with all other pods on any other node without NAT
파드는 다른 모든 파드와 NAT 없이 통신할 수 있다.
agents on a node (e.g. system daemons, kubelet) can communicate with all pods on that node
- 특정 노드에 있는 에이전트(데몬, kubelet등)는 그 노드내의 파드들과 통신할 수 있다.
2. The Pod itself is blind to the existence or non-existence of host ports.
파드는 본인 Host에서 존재하거나 존재하지 않는 Port에 대해서 모른척한다.
Kubernetes networking addresses four concerns:
쿠버네티스 네트워크 주소들은 내개의 공감대를 갖고 있다.
- Containers within a Pod use networking to communicate via loopback.
같은 파드내에서 컨테이너 끼리의 통신은 루프백으로 이루어 진다.
- Cluster networking provides communication between different Pods.
클러스터 네트워킹은 다른 파드간에 통신을 가능케 한다.
The Service API lets you expose an application running in Pods to be reachable from outside your cluster.
- 당신의 클러스터 밖에서 파드에 접근하기 위해서는 서비스 API가 그 어플리케이션을 노출시켜야 한다.
Ingress provides extra functionality specifically for exposing HTTP applications, websites and APIs.
- 인그레스는 HTTP어플리케이션이 기능적으로 특별하게 외부에 노출시키는 기능을 제공한다.
You can also use Services to publish services only for consumption inside your cluster.
- Service(k8s자원)를 이용해 서비스들을 클러스터 내부에서만 사용되도록 할 수 있다.
-----------------------------
이 명세는 "my-service"라는 새로운 서비스 오브젝트를 생성하고, app.kubernetes.io/name=MyApp 레이블을 가진 파드의 TCP 9376 포트를 대상으로 한다.
쿠버네티스는 이 서비스에 서비스 프록시가 사용하는 IP 주소 ("cluster IP"라고도 함) 를 할당한다. (이하 가상 IP와 서비스 프록시 참고)
서비스 셀렉터의 컨트롤러는 셀렉터와 일치하는 파드를 지속적으로 검색하고, "my-service"라는 엔드포인트 오브젝트에 대한 모든 업데이트를 POST한다.
IPVS 프록시 모드
ipvs 모드에서, kube-proxy는 쿠버네티스 서비스와 엔드포인트슬라이스를 감시하고, netlink 인터페이스를 호출하여 그에 따라 IPVS 규칙을 생성하고 IPVS 규칙을 쿠버네티스 서비스 및 엔드포인트슬라이스와 주기적으로 동기화한다. 이 제어 루프는 IPVS 상태가 원하는 상태와 일치하도록 보장한다. 서비스에 접근하면, IPVS는 트래픽을 백엔드 파드 중 하나로 보낸다.
IPVS 프록시 모드는 iptables 모드와 유사한 넷필터 후크 기능을 기반으로 하지만, 해시 테이블을 기본 데이터 구조로 사용하고 커널 스페이스에서 동작한다. 이는 IPVS 모드의 kube-proxy는 iptables 모드의 kube-proxy보다 지연 시간이 짧은 트래픽을 리다이렉션하고, 프록시 규칙을 동기화할 때 성능이 훨씬 향상됨을 의미한다. 다른 프록시 모드와 비교했을 때, IPVS 모드는 높은 네트워크 트래픽 처리량도 지원한다.
IPVS는 트래픽을 백엔드 파드로 밸런싱하기 위한 추가 옵션을 제공하며, 그 목록은 다음과 같다.
rr: 라운드-로빈
lc: 최소 연결 (smallest number of open connections)
dh: 목적지 해싱
sh: 소스 해싱
sed: 최단 예상 지연 (shortest expected delay)
nq: 큐 미사용 (never queue)
'PaaS > 기타' 카테고리의 다른 글
keyCloak 기능 설명 - 2. Clients (0) | 2023.10.18 |
---|---|
keyCloak 기능 설명 - 1 Realm Setting (0) | 2023.10.17 |
Redis cli 커맨드 모음 (0) | 2023.09.01 |
Redis 설치 Centos7에서 (1) | 2023.08.31 |
KeyCloak 17버전 Centos7에 설치하기 (0) | 2023.08.31 |