클라이언트와 파드의 연결 담당
파드들이 외부의 트래픽을 받을 수 있도록 노출 시킬 수 O
YAML파일 - spec에서 type형태로 지정
주로 NodePort와 LoadBalancer를 사용
ClusterIP
- 기본 설정값
- 클러스터 내부에서만 파드에 접근 가능한 IP 할당
# ~/work/ch09/ex05/service-test01.yml
apiVersion: v1
kind: Service
metadata:
name: web-service
spec:
selector:
app.kubernetes.io/name: web-deploy # 서비스와 연결할 파드
type: ClusterIP
ports:
- protocol: TCP
port: 80
kubectl apply -f deploy-test01.yml
kubectl apply -f service-test01.yml
kubectl get all
# ~/work/ch09/ex05/nginx-test01.yml
# 쿠버네티스 서비스에 요청할 파드
apiVersion: v1
kind: Pod
metadata:
name: nginx01
spec:
containers:
- name: nginx-test01
image: nginx:latest
kubectl apply -f nginx-test01.yml
kubectl get all
kubectl exec -it nginx01 -- /bin/bash
# bash 진입
curl <쿠버네티스 서비스IP>
NodePort
- 클러스터의 각 노드에서 NodeIP>:<NodePort>를 통해 클러스터 외부에서 접근할 수 있게 해줌
- NAT을 사용하는 클러스터 내에서 각 노드들의 지정된 포트(30000~32767)를 외부에 노출
- 1~1024 : well-known 포트
- 1025 ~ 65535 : 각 서비스가 지정하는 포트
- ClusterIP 자동 생성
# ~/work/ch09/ex06/service-test02.yml
apiVersion: v1
kind: Service
metadata:
name: web-service-nodeport
spec:
selector:
app.kubernetes.io/name: web-deploy # 서비스와 연결할 파드
type: NodePort
ports:
- protocol: TCP
nodePort: 31001 # 노드로 연결할 NodePort
port: 80 # 서비스가 사용할 Port
targetPort: 80 # 파드가 받게 될 포트
kubectl apply -f deploy-test01.yml
kubectl apply -f service-test02.yml
kubectl get all
kubectl get pod -o wide
LoadBalancer
- 클라우드 제공자의 로드 밸런서를 사용하고, 서비스에 고정된 공인된 IP를 할당
- NodePort의 상위 집합
- 쿠버네티스 클러스터 외부에서도 쿠버네티스 내부에 존재하는 파드에 접근 가능
# ~/work/ch09/ex07/service-test03.yml
apiVersion: v1
kind: Service
metadata:
name: web-service-loadbalancer
spec:
selector:
app.kubernetes.io/name: web-deploy # 서비스와 연결할 파드
type: LoadBalancer
ports:
- protocol: TCP
nodePort: 31002 # 노드로 연결할 NodePort
port: 80 # 서비스가 사용할 Port
targetPort: 80 # 파드가 받게 될 포트
externalIPs: # 외부에서 접근할 수 있는 외부 IP
- 192.168.64.8 # myserver01의 IP
ExternalName
- CNAME 레코드를 통해 클러스터 외부 서비스로의 DNS 조회를 제공하는 유형
- 서비스가 클러스터 외부에 있는 외부 도메인 가리키도록 설정 가능
# ~/work/ch09/ex08/service-test04.yml
apiVersion: v1
kind: Service
metadata:
name: web-service-externalname
spec:
type: ExternalName
externalName: www.google.com
kubectl apply -f service-test04.yml
kubectl apply -f nginx-test01.yml
kubectl get all
kubectl exec -it nginx01 -- /bin/bash
## bash 진입
curl 'web-service-externalname'
## 접속결과 ~~
'Cloud' 카테고리의 다른 글
[CI/CD] Github Actions와 ArgoCD를 활용한 CI/CD (0) | 2024.11.05 |
---|---|
[K8s] Kubernetes 활용한 웹 서비스 배포 (0) | 2024.11.05 |
[K8s] Kubernetes Ingress 및 Helm (2) | 2024.11.05 |
[K8s] kubectl과 Workload (0) | 2024.10.25 |
[K8s] K8s 구조 및 실습 환경 구축 (0) | 2024.10.01 |