Kubernetes Service 실습

Service 살펴보기

Service 확인하기.

kubectl get svc

NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP   2m57s

서비스 상세 보기.

kubectl describe svc kubernetes

Name:              kubernetes
Namespace:         default
Labels:            component=apiserver
                   provider=kubernetes
Annotations:       <none>
Selector:          <none>
Type:              ClusterIP
IP:                10.96.0.1
Port:              https  443/TCP
TargetPort:        6443/TCP
Endpoints:         172.17.0.15:6443
Session Affinity:  None
Events:            <none>
  • 기본 네임스페이스 default 를 사용한다.
  • Type: ClusterIP 이므로 클러스터 내부에서 접근할 수 있다.
  • Port: pod 내 연결된 포트
  • TargetPort: 노출되는 포트

서비스 매니페스트 생성하기.

---
apiVersion: v1
kind: Service
metadata:
  name: webapp-service
spec:
  type: NodePort
  ports:
    - targetPort: 80
      port: 8080
      nodePort: 30080
  selector:
    name: simple-webapp
  • apiVersion: Service 는 v1이다.
  • kind: Service 임을 의미
  • type: NodePort 는 클러스터 노드에서 해당 포트로 해당 서비스를 외부에 오픈해서 접근할 수 있도록 한다.
  • ports.targetPort: 서비스가 가리키는 POD 에 서비스되는 포트이다.
  • ports.port: 쿠버네티스 클러스터 내부에서 해당 포트로 접근 할 수 있도록 해준다.
  • ports.nodePort: NodePort 는 클러스터 노드에 포트가 할당된다. 외부에서 해당 노드의 IP:Port 로 접속할 수 있다.
  • selector.name: pod 의 이름이 지정된다.

예) pod설정이 다음과 같은경우

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    app: hello-world
spec:
  containers:
  - name: nginx
    image: nginx
    ports:
      - containerPort: 80

즉 외부에서 curl nodeIP:nodePort –> targetPort –> nginx Pod 로 트래픽이 흐른다.

그리고 클러스터 내부에서 dns:port –> targetPort –> nginx Pod 로 트래픽이 흐른다.