포드를 연결하고 외부에 노출
vi deployment-hostname.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: hostname-deployment
spec:
replicas: 3
selector:
matchLabels:
app: webserver
template:
metadata:
name: my-webserver
labels:
app: webserver
spec:
containers:
- name: my-webserver
image: alicek106/rr-test:echo-hostname # 파드의 호스트 이름을 반환하는 웹 서버 이미지
ports:
- containerPort: 80
kubectl apply -f deployment-hostname.yaml
kubectl run -i --tty --rm debug --image=alicek106/ubuntu:curl --restart=Never curl 192.168.104.36 | grep Hello
1. CluserIP 타입의 서비스 - 쿠버네티스 클러스터 내부에서만 포드에 접근
apiVersion: v1
kind: Service
metadata:
name: hostname-svc-clusterip
spec:
ports:
- name: web-port
port: 8080 # 서비스의 IP에 접근할 때 사용할 포트
targetPort: 80 # selector 항목에서 정의한 라벨의 포트의 내부에서 사용하고 있는 포트
selector: # 접근 허용할 포드의 라벨을 정의
app: webserver
type: ClusterIP # 서비스 타입
2. 서비스 생성 및 확인
kubectl apply -f hostname-svc-clusterip.yaml
kubectl get services
kubectl get svc
3. 임시 포드를 생성해서 서비스로 요청
kubectl run -it --rm debug --image=alicek106/ubuntu:curl --restart=Never -- bash
ip a
curl 10.109.166.250:8080 --silent | grep Hello
load balancing
을 수행4. 서비스 이름으로 접근
curl hostname-svc-clusterip:8080 --silent | grep Hello
쿠버네티스는 어플리케이션이 서비스나 포드를 쉽게 찾을 수 있도록 내부 DNS를 구동
5. 서비스 삭제
kubectl delete service hostname-svc-clusterip
1. NodePort 타입 서비스 - 서비스를 이용해 포드를 외부에 노출하기 위해서 사용
모든 노드의 특정 포트를 개방해 서비스에 접근하는 방식
vi hostname-svc-nodeport.yaml
apiVersion: v1
kind: Service
metadata:
name: hostname-svc-nodeport
spec:
ports:
- name: web-port
port: 8080
targetPort: 80
selector:
app: webserver
type: NodePort
kubectl apply -f hostname-svc-nodeport.yaml
kubectl get services
kubectl get nodes -o wide
curl 127.0.0.1:31543
kubectl run -it --rm debug --image=alicek106/ubuntu:curl --restart=Never -- bash
curl 127.0.0.1:31543
curl hostname-svc-nodeport:8080