K8S 백엔드 서비스를 전달하는 네 가지 방법

K8S 백엔드 서비스를 전달하는 네 가지 방법

ClusterIP

이 유형은 클러스터 내의 포드 간 통신을 위해 클러스터 내에서 가상 IP를 제공합니다 (Pod와 동일한 네트워크 세그먼트에 없음). ClusterIP는 Kubernetes 서비스의 기본 유형이기도합니다.

ClusterIP
그림의 기능을 구현하기 위해 주로 다음 구성 요소가 함께 작동해야합니다.
apiserver : 서비스를 생성 할 때 apiserver는 요청을 수신 한 후 etcd에 데이터를 저장합니다.
Kube-proxy : k8s의 각 노드에는 서비스 기능 구현을 담당하는이 프로세스가 있으며,이 프로세스는 서비스 및 포드의 변경 사항을 감지하고 변경된 정보를 로컬 iptables에 기록하는 역할을합니다.
iptables : NAT 및 기타 기술을 사용하여 virtualIP 트래픽을 엔드 포인트로 전송합니다.

 

NodePort

클러스터 ip를 사용하는 것 외에도 NodePort 모드는 서비스 포트를 각 노드의 지정된 내부 포트에 매핑합니다. 매핑 된 각 노드의 내부 포트는 동일합니다.
각 노드에 대한 포트를 노출하면 nodeip + nodeport를 통해 서비스에 액세스 할 수 있으며 서비스는 여전히 클러스터 유형 ip + port를 갖습니다. 내부는 clusterip를 통해 액세스되고 외부는 nodeport를 통해 액세스됩니다.

여기에 사진 설명 쓰기

 

부하 균형

LoadBalancer는 NodePort를 기반으로하며, K8S는 서비스 배포를위한 백엔드로 각 노드를 사용하여 기본 클라우드 플랫폼에로드 밸런서를 생성하도록 요청할 수 있습니다. 이 모드에는 기본 클라우드 플랫폼 (예 : GCE)의 지원이 필요합니다.

입구

Ingress는 Ingress Controller와 HTTP 프록시 서버의 조합 인 HTTP 라우팅 및 전달 메커니즘입니다. Ingress Controller는 Kubernetes API를 실시간으로 모니터링하고 HTTP 프록시 서버의 전달 규칙을 실시간으로 업데이트합니다. HTTP 프록시 서버에는 GCE Load-Balancer, HaProxy 및 Nginx와 같은 오픈 소스 솔루션이 있습니다.
자세한 내용은 http://blog.csdn.net/liyingke112/article/details/77066814를 참조하십시오.

여기에 사진 설명 쓰기

서비스 포트 3 개

포트

포트는 클러스터 IP에 노출 된 포트이며, 포트는 서비스에 액세스하기 위해 클러스터 내부의 클라이언트 입구를 제공합니다 clusterIP:port.

mysql 컨테이너는 포트 3306을 노출합니다 ( DockerFile 참조 ). 클러스터의 다른 컨테이너는 포트 33306을 통해 mysql 서비스에 액세스하지만 mysql 서비스가 NodePort로 구성되지 않았기 때문에 외부 트래픽이 mysql 서비스에 액세스 할 수 없습니다. 해당 service.yaml은 다음과 같습니다.

nodePort

nodePort는 클러스터의 외부 클라이언트가 서비스에 액세스 할 수있는 방법을 제공합니다. nodePort는 클러스터의 외부 클라이언트가 서비스에 액세스 할 수있는 포트를 nodeIP:nodePort제공합니다. 즉, k8s 클러스터의 서비스에 액세스하기위한 외부 트래픽의 입구를 제공합니다.

예를 들어 외부 사용자가 k8s 클러스터 웹 응용 프로그램에 액세스하면 type=NodePort, nodePort=30001. 다른 사용자는 브라우저를 통해 http://node:30001웹 서비스에 액세스 할 수 있습니다.

데이터베이스와 같은 서비스는 외부 세계에서 액세스 할 필요가 없지만 내부 서비스에 의해서만 액세스 할 필요가 있으므로 서비스의 NodePort를 설정할 필요가 없습니다.

targetPort

targetPort는 포드의 포트입니다. port / nodePort의 데이터는 kube-proxy를 통해 백엔드 포드의 targetPort로 이동하고 마지막으로 컨테이너로 들어갑니다.

containerPort

containerPort는 포드 컨트롤러에 정의되어 있으며 포드의 컨테이너에 의해 노출되어야합니다.

port, nodePort 요약

일반적으로 port와 nodePort는 모두 서비스 포트이며, 전자는 서비스에 액세스하기 위해 클러스터의 고객에게 노출되고 후자는 서비스에 액세스하기 위해 클러스터 외부의 고객에게 노출됩니다. 이 두 포트에서 도착하는 데이터는 팟 (Pod)의 컨테이너에 도달하기 위해 역방향 프록시 kube-proxy를 통해 백엔드 팟 (Pod)의 targetPod로 이동해야합니다.

 

추천

출처blog.csdn.net/qq_42533216/article/details/114121207