Kubernetes에서 클러스터 내의 Pod들(마이크로서비스)에 접근하기 위해 사용하는 라우터 역할의 객체
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: order
ports:
- protocol: TCP
port: 8080
targetPort: 8080
type: ClusterIP # 또는 NodePort, LoadBalancer
kubectl create deploy order --image=ghcr.io/acmexii/order-liveness:latest
kubectl expose deploy order --type=ClusterIP --port=8080 --target-port=8080
kubectl get service
kubectl get service order -o yaml # Selector 확인

kubectl apply -f - <<EOF
apiVersion: v1
kind: Pod
metadata:
name: siege
spec:
containers:
- name: siege
image: apexacme/siege-nginx
EOF
kubectl exec -it siege -- /bin/bash
http http://<ClusterIP>:8080

kubectl delete service order
kubectl expose deploy order --type=NodePort --port=8080 --target-port=8080
kubectl get service # NodePort 확인
kubectl get pod -o wide # 어떤 노드에 Pod가 있는지 확인
kubectl get nodes -o wide # Node IP 확인

http http://<NodeIP>:<NodePort>

특정 노드에 Pod가 없더라도 접속 가능한 이유는
kube-proxy가 모든 노드에 네트워크 라우팅 규칙을 설정(IPTables)하기 때문
kubectl delete service order
kubectl expose deploy order --type=LoadBalancer --port=8080 --target-port=8080
kubectl get service # External-IP 확인
http://<External-IP>:8080
http http://order:8080

kubectl get service -n kube-system
cat /etc/resolv.conf # 컨테이너 내부 DNS 서버 확인
