backend/kubernetes in action

[kubernetes in action] 5-2. Connecting to service living outside the cluster

seul chan 2020. 6. 6. 15:00

5.2. Connecting to service living outside the cluster

Introducing service endpoints

service는 사실 pod와 직접 링크되는게 아니라 Endpoint resource가 중간에 존재한다.

$ kubectl describe svc kubia
Name:              kubia
Namespace:         default
Labels:            <none>
Annotations:       <none>
Selector:          app=kubia
Type:              ClusterIP
IP:                10.100.198.79
Port:              http  80/TCP
TargetPort:        8080/TCP
Endpoints:         172.17.0.7:8080,172.17.0.8:8080,172.17.0.9:8080
Port:              https  443/TCP
TargetPort:        8443/TCP
Endpoints:         172.17.0.7:8443,172.17.0.8:8443,172.17.0.9:8443
Session Affinity:  ClientIP

다른 resource 처럼 kubectl get으로 볼 수 있음

$ kubectl get endpoint kubia
NAME    ENDPOINTS                                                     AGE
kubia   172.17.0.7:8443,172.17.0.8:8443,172.17.0.9:8443 + 3 more...   22h

Manually configuring service endpoints

service와 endpoint를 모두 직접 만들어야 수동으로 endpoints를 관리하는 service를 생성 가능하다.

external-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: external-service          1
spec:                             2
  ports:
  - port: 80

80포트로 열린 external-service라는 service를 만들었지만 따로 pod selector를 지정하지 않았기 때문에 endpoint가 자동으로 만들어지지 않는다.

external-service-endpoints.yaml

apiVersion: v1
kind: Endpoints
metadata:
  name: external-service      1
subsets:
  - addresses:
    - ip: 11.11.11.11         2
    - ip: 22.22.22.22         2
    ports:
    - port: 80                3