[k8s] Service (2)

4. LoadBalancer

NodePort만 사용하는 경우 노드의 IP를 외부에 공개해야 하며, 이게 싫다면 앞단에 L4스위치를 설치해야 한다. 외부에는 L4 스위치의 IP를 공개하고, 이 IP로 들어오는 트래픽을 노드들에게 분산한다.

이러한 가상의 L4 스위치 역할을 해주는 것이 LoadBalancer 서비스이다. LoadBalancer 서비스는 퍼블릭 클라우드에서 제공하는 로드밸런서와 연동 후 로드밸런서의 IP를 이용해 외부로 노출한다.

LoadBalancer는 NodePort를 사용하기 때문에 ClusterIP도 자동적으로 만들어진다. LoadBalancer의 IP로 트래픽이 들어오면 NodePort를 통해 노드들에게 분산하고, 노드는 파드에게 분산한다.

img

apiVersion: v1
kind: Service
metadata:
  name: loadbanalcer-service
spec:
  type: LoadBalancer
  selector:
    # app=nginx-app 인 파드들이 이 서비스에 속함
    app: nginx-app
  ports:
  - protocol: TCP
    # 노드의 30080포트로 요청을 받음
    nodePort: 30080
    # ClusterIP는 80포트를 리스닝
    port: 80
    # 파드의 80포트로 포워딩
    targetPort: 80

yaml 파일 형식은 spec.type이 LoadBalancer 인 것 말고는 NodePort와 동일하다

kubectl get svc를 하면 LoadBalancer의 외부IP를 확인할 수 있다.

PS C:\Users\lewis\Desktop> kubectl get svc                                                                                                                                                                       NAME                   TYPE           CLUSTER-IP      EXTERNAL-IP                                                                    PORT(S)        AGE                                                          kubernetes             ClusterIP      10.100.0.1      <none>                                                                         443/TCP        16m                                                          loadbanalcer-service   LoadBalancer   10.100.72.205   adfb1f36f56ba4d6882375f5e7278ab3-1618852390.ap-northeast-2.elb.amazonaws.com   80:30080/TCP   3m43s 

AWS의 EKS를 사용해 클러스터를 만들었고, LoadBalancer 서비스를 생성하니 ELB에 연결되었다.

5. ExternalName

파드가 외부에서 데이터를 가져오는데, 이 외부 사이트 주소가 변경될 수 있다고 하자. 이럴 때 사용되는 것이 ExternamName 서비스이다.

ExternalName은 외부 도메인 네임을 내부적으로 CNAME으로 제공해 통신할 수 있다. 만약 외부 사이트의 주소가 바뀌더라도 파드를 업데이트 하는 것 대신 ExternalName만 바꾸면 된다.

apiVersion: v1
kind: Service
metadata:
  name: externalname-service
spec:
  type: ExternalName
  externalName: www.google.com

위와 같은 ExternalName을 생성하면, 클러스터의 파드들은 www.google.com 대신 externalname-service를 사용할 수 있다.

카테고리:

업데이트:

댓글남기기