-
Kubernetes (K8S): Object - 4. Service공부합시다!/Kubernetes 2022. 6. 13. 21:09728x90
POD를 외부에 노출하는 서비스에 대해서 살펴봅니다.
Service는
POD에게 고유한 IP 주소와 파드 집합에 대한 단일 DNS 명을 부여하고, POD 간에 로드-밸런싱 가능케 함
1. 정의
2. Cluster IP : K8S로만 실행가능
3. NodePort : K8S로만 실행가능
4. LoadBalancer
5. ExternalName
순으로 진행합니다.
1. 정의
1.1. POD에 접근하는 정책 정의
1.2. POD간 통신이 가능하도록 EndPoint 생성
1.3. POD가 외부에서 접근 가능하도록 노출
2. Cluster IP : K8S로만 실행가능
2.1. Cluster 내부 IP에 노출
2.2. Cluster내에서만 서비스에 접근가능
2.3. Service Type의 기본값
2.4. 실습
2.4.1. 지난 시간의 nginxdep.yml 실행
# vi nginxdep.yml apiVersion: apps/v1 kind: Deployment # 생성할 obejct 종류 지정 metadata: name: nginx-deployment # 생성할 deployment 이름 지정 spec: # deployment spec selector: # deployment 관리할 POD 지정 matchLabels: # 관리할 POD의 label 지정 -> template의 labels과 동일 app: nginx # labels의 이름과 동일 replicas: 2 # POD 2개 생성 template: # 생성할 POD의 기본이미지가 되는 Template metadata: labels: # template labels지정, selector가 이 부분을 지정 app: nginx # selector의 matechLabels가 이 부분을 참조 spec: # container의 spec 지정 containers: - name: nginx # nginx 이미지 사용 image: nginx:1.14.2 # nginx 이미지 버젼 ports: - containerPort: 80 # container 내부 port # kubectl apply -f nginxdep.yml
2.4.2. deployment 생성 및 확인
# kubectl get pod # kubectl get replicaset # kubectl get deployment
2.4.3. ClusterIP 생성 및 확인
# kubectl expose deployment nginx-deployment # kubectl get svc
2.4.4. ClusterIP 삭제 및 확인
# kubectl delete svc nginx-deployment # kubectl get svc
3. NodePort : K8S로만 실행가능
3.1. 고정포트로 각 Node의 IP에 서비스 노출
3.2. NodePort 서비스가 라우팅 되는 ClusterIP 서비스가 자동 생성
3.3. NodeIP:NodePort를 요청하여 Cluster 외부에서 NodePort 서비스에 접속가능
3.4. 실습 : deployment 생성 단계 까지는 2. clusterIP와 동일
3.4.1. NodePort 생성 및 확인
# kubectl expose deployment nginx-deployment --type=NodePort \ --port 8080 --target-port=80 --protocol=TCP # kubectl get svc
3.4.2. config file을 이용한 NodePort 생성 및 확인
# vi nginxsvc.yml apiVersion: v1 kind: Service # 생성할 object 종류는 service metadata: name: svc-nginx # service 이름 kubectl get svc 의 이름 labels: run: nginx # service label spec: type: NodePort # service type ports: - port: 8080 # cluster 에서 사용할 Port targetPort: 80 # POD or container port nodePort: 30080 # service port protocol: TCP # protocol 지정 selector: app: nginx # deployment의 template lebels 과 동일 # 실제 nodeport의 범위는 30000~32767 사이에서 할당됨. # kubectl apply -f nginxsvc.yml # kubectl get svc # kubectl describe svc svc-nginx
3.4.3. 접속
3.4.3.1. 브라우저에서 각 NODE IP:NodePort 로 접속 테스트
4. LoadBalancer
4.1. CSP(Cloud Service Provider)의 LoadBalancer를 사용하여 외부에서 서비스 접속 가능
4.2. 외부 LoadBalancer가 라우팅되는 NodePort와 ClusterIP 서비스가 자동 생성
5. ExternalName
5.1. 값과 함께 CNAME 레코드 리턴
5.2. 서비스를 externalName필드의 Contents(foo.bar.babo.com)에 맵핑
5.3. 어떠한 Proxy도 설정되어 있지 않음
4, 5번은 추후 살펴보도록 하겠습니다.
Have a nice day!
728x90'공부합시다! > Kubernetes' 카테고리의 다른 글
Kubernetes (K8S): Object - 6-2. Storage: hostpath (0) 2022.06.15 Kubernetes (K8S): Object - 5. Ingress (0) 2022.06.14 Kubernetes (K8S): Object - 3. Deployment (0) 2022.06.12 Kubernetes (K8S): Object - 1. NameSpace (0) 2022.06.10 Kubernetes (K8S): 간단한 POD & Service 구성 Test (0) 2022.06.09