반응형

설명

type

  • ClusterIP
    • 서비스를 클러스터 내에서만 접근 가능
    • service type의 default값
  • NodePort
    • {node_ip}:{node_port} 를 클러스터 외부에서 접근 가능
  • LoadBalancer
    • 클라우드 공급자의 로드 밸런서를 사용해 서비스를 외부에 노출
  • ExternalName
    • 프록시 역할?

클러스터 내부에서 접근 예제 - ClusterIP

  • webserver-service.yml
    apiVersion: v1
    kind: Service
    metadata:
      name: webserver-service
    spec:
      type: ClusterIP
      ports:
        - name: http
          protocol: TCP
          port: 80
          targetPort: 80      
      selector:
        app: webserver
    
  • 적용
    kubectl apply -f webserver-service.yml
    
  • 서비스 확인
    kubectl get service
    
    NAME                TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
    kubernetes          ClusterIP   10.96.0.1      <none>        443/TCP   30m
    webserver-service   ClusterIP   10.97.97.147   <none>        80/TCP    12m
    
  • 클러스터 내부에서 접근 가능 확인
    kubectl run -it test-pod \
    --image=byrnedo/alpine-curl \
    --rm --restart=Never \
    --command -- curl http://webserver-service
    
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        Hello World
    </body>
    </html>
    

클러스터 외부에서 접근 예제 - ClusterIP

  • webserver-service.yml
    apiVersion: v1
    kind: Service
    metadata:
      name: webserver-service
    spec:
      type: ClusterIP
      ports:
        - name: http
          protocol: TCP
          port: 80
          targetPort: 80
      externalIPs:
        - 192.168.56.102
        - 192.168.56.103
      selector:
        app: webserver
    
  • 적용
    kubectl apply -f webserver-service.yml
    
  • 서비스 확인
    kubectl get service
    
    NAME                TYPE        CLUSTER-IP     EXTERNAL-IP                     PORT(S)   AGE
    kubernetes          ClusterIP   10.96.0.1      <none>                          443/TCP   36m
    webserver-service   ClusterIP   10.97.97.147   192.168.56.102,192.168.56.103   80/TCP    18m
    
  • 클러스터 외부에서 접근 가능 확인
    # 노드 IP : 192.168.56.102, 192.168.56.103
    curl 192.168.56.102
    
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        Hello World
    </body>
    </html>
    

클러스터 외부에서 접근 예제 - NodePort

  • webserver-service.yml
    apiVersion: v1
    kind: Service
    metadata:
      name: webserver-service
    spec:
      type: NodePort
      ports:
        - name: http
          protocol: TCP
          port: 80
          targetPort: 80
          nodePort: 30080 # 30000-32767 사이값, 설정값 없으면 랜덤으로 지정
      selector:
        app: webserver
    
  • 적용
    kubectl apply -f webserver-service.yml
    
  • 서비스 확인
    kubectl get service
    
    NAME                TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
    kubernetes          ClusterIP   10.96.0.1      <none>        443/TCP        60m
    webserver-service   NodePort    10.97.97.147   <none>        80:30080/TCP   42m
    
  • 클러스터 외부에서 접근 가능 확인
    # 노드 IP : 192.168.56.102, 192.168.56.103
    curl 192.168.56.102:30080
    
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        Hello World
    </body>
    </html>
    

참고

반응형

'Development > Kubernetes' 카테고리의 다른 글

[Kubernetes] Helm Templates  (0) 2020.12.29
[Kubernetes] Helm 설치  (0) 2020.12.29
[Kubernetes] 예제  (0) 2020.12.29
[Kubernetes] 명령어  (0) 2020.12.29
[Kubernetes] Minikube 설치  (0) 2020.12.29

+ Recent posts