Kubernetes에는 Pod 및 서비스가 클러스터 네트워크 내부 및 외부에서 통신할 수 있도록 하는 고급 네트워킹 기능이 있습니다.
Kubernetes 서비스는 Pod 집합에 액세스하는 방법에 대한 정책 및 접근 방식을 정의하는 요약입니다.
서비스를 통해 액세스되는 pod 세트는 레이블 선택기를 기반으로 합니다.
핵심 타입
- Cluster IP
- Target Ports
- NodePort
- External IPs
- Load Balancer
1 Cluster IP
클러스터 IP는 쿠버네티스 서비스를 생성할 때 기본 접근 방식이다.
서비스에는 다른 구성요소가 포드에 엑세스하는 데 사용할 수 있는 내부 IP가 할당된다.
단일 IP주소를 사용하면 서비스가 여러 Pod에서 로드밸런싱될 수 있다.
YAML
apiVersion: v1
kind: Service
metadata:
name: webapp1-clusterip-svc
labels:
app: webapp1-clusterip
spec:
ports:
- port: 80
selector:
app: webapp1-clusterip
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: webapp1-clusterip-deployment
spec:
replicas: 2
template:
metadata:
labels:
app: webapp1-clusterip
spec:
containers:
- name: webapp1-clusterip-pod
image: katacoda/docker-http-server:latest
ports:
- containerPort: 80
---
kubectl apply -f clusterip.yaml.
배포후에 할단된 ClusterIP를 통해 서비스에 엑세스할 수 있다
export CLUSTER_IP=$(kubectl get services/webapp1-clusterip-svc -o go-template='{{(index .spec.clusterIP)}}')
echo CLUSTER_IP=$CLUSTER_IP
curl $CLUSTER_IP:80
여러 pod에서 서비스 로드 밸런서가 어떻게 작동하는지 보여준다.
curl $CLUSTER_IP:80
2 TargetPort
: 애플리케이션이 수신 대기하도록 구성된 포트
TargetPort를 사용하면 애플리케이션이 수신 대기 중인 포트에서 서비스를 사용할 수 있는 포트를 분리할 수 있다.
포트는 외부에서 애플리케이션에 액세스하는 방법이다
서비스 및 pod 추가 배포하기
kubectl apply -f clusterip-target.yaml
서비스 및 포드가 배포된 후 클러스터IP를 통해 엑세스할 수 있지만, 정의된 포트 8080에서 엑세스할 수 있다.
export CLUSTER_IP=$(kubectl get services/webapp1-clusterip-targetport-svc -o go-template='{{(index .spec.clusterIP)}}')
echo CLUSTER_IP=$CLUSTER_IP
curl $CLUSTER_IP:8080
curl $CLUSTER_IP:8080
3 NodePort
TargetPort와 클러스터IP는 클러스터 내부에서 사용할 수 있도록 하는 반면
NodePort는 정의된 정적 포트를 통해 각 노드의 IP에 서비스를 노출한다.
클러스터 내의 어떤 노드에 엑세스하든지 정의된 포트 번호를 기반으로 서비스에 연결할 수 있다.
YAML
apiVersion: v1
kind: Service
metadata:
name: webapp1-nodeport-svc
labels:
app: webapp1-nodeport
spec:
type: NodePort
ports:
- port: 80
nodePort: 30080
selector:
app: webapp1-nodeport
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: webapp1-nodeport-deployment
spec:
replicas: 2
template:
metadata:
labels:
app: webapp1-nodeport
spec:
containers:
- name: webapp1-nodeport-pod
image: katacoda/docker-http-server:latest
ports:
- containerPort: 80
---
정의된 NodePort에서 노드의 IP 주소를 통해 서비스에 연결하기
curl 172.17.0.95:30080
'도커&쿠버네티스' 카테고리의 다른 글
[katakoda] Running Stateful Services on Kubernetes (0) | 2022.03.29 |
---|---|
[katakoda] Liveness and Readiness Healthcheck 활성 및 준비 상태 점검 (0) | 2022.03.28 |
[katakoda] Deploy Guestbook Web App Example (0) | 2022.03.22 |
[katakoda] Deploy Containers Using YAML 컨테이너 배포하기 (0) | 2022.03.22 |
[katakoda] Deploy Containers Using Kubectl 컨테이너 배포하기 (0) | 2022.03.22 |
댓글