ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [k8s] 인그레스(Ingress) 컨트롤러
    클라우드/kubernetes 2021. 3. 30. 19:21
    728x90

     

    master  192.168.122.11 

    node1  192.168.122.21

    node2  192.168.122.22

    node3  192.168.122.23

     

     

     

    쿠버네티스 외부에 노출 시켜야할 서비스가 많을 경우, 하나의 인그레스 컨트롤러를 이용해서 HTTP 요청의 주소부분을 구분해 각 서비스에 연결할 수 있다.

     

    인그레스 컨트롤러는 OSI Layer 7(HTTP/HTTPS)에서 작동한다. 

     

    $ kubectl get all -n ingress-nginx 
    NAME                                 READY   STATUS    RESTARTS   AGE
    pod/ingress-nginx-controller-gfzm6   1/1     Running   1          253d
    pod/ingress-nginx-controller-ncgqh   1/1     Running   1          253d
    pod/ingress-nginx-controller-w74wk   1/1     Running   1          253d
    
    NAME                                      DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR                 AGE
    daemonset.apps/ingress-nginx-controller   3         3         3       3            3           beta.kubernetes.io/os=linux   253d
    

     

     

     

    1. 인그레스 생성

    mynapp-ing.yml
    apiVersion: networking.k8s.io/v1beta1
    kind: Ingress
    metadata:
      name: mynapp-ing
    spec:
      rules:
      - host: mynapp.example.com
        http:
          paths:
          - path: /
            backend:
              serviceName: mynapp-svc-ext-np
              servicePort: 80

    외부에서 mynapp.example.com FQDN 주소를 통해 인그러스 컨트롤러에 접속하면, 인그러스 컨트롤러는 백엔드 서비스인 mynapp-svc-ext-np 서비스에 리다이렉션하며, mynapp-svc-ext-np 서비스는 레이블 셀렉터에 매핑된 파드로 연결해준다.

     

    # 레플리카셋 컨트롤러와 NodePort 서비스를 생성한다. 
    
    $ kubectl create -f mynapp-rs.yml -f mynapp-svc-ext-nodeport.yml 
    
    
    # 인그레스 컨트롤러 생성
    
    $ kubectl create -f mynapp-ing.yml 

     

     

     

    2. 인그레스 컨트롤러 확인

    $ kubectl get ingresses.networking.k8s.io 
    NAME         HOSTS                ADDRESS   PORTS   AGE
    mynapp-ing   mynapp.example.com             80      33s

    *!인그레스 컨트롤러에 주소가 할당되야 하는데, 기다려도 할당되지 않음. 이유를 모르겠다.

     

    $ kubectl get all
    NAME                  READY   STATUS    RESTARTS   AGE
    pod/mynapp-rs-4vmp4   1/1     Running   0          7m49s
    pod/mynapp-rs-bnmnr   1/1     Running   0          7m49s
    pod/mynapp-rs-qxhch   1/1     Running   0          7m49s
    
    NAME                        TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)        AGE
    service/kubernetes          ClusterIP   10.233.0.1    <none>        443/TCP        253d
    service/mynapp-svc-ext-np   NodePort    10.233.0.88   <none>        80:31111/TCP   7m49s
    
    NAME                        DESIRED   CURRENT   READY   AGE
    replicaset.apps/mynapp-rs   3         3         3       7m49s
    

     

     

     

    3. 인그레스 컨트롤러에 요청할 때에는 mynapp.example.com 주소로 접근해야 해당 mynapp-svc-ext-np 서비스로 리다이렉션 하게 된다.

    curl 명령의 --resolve 옵션을 사용하면 해당 FQDN의 주소를 IP로 변환시킨다. 

    $ curl mynapp.example.com:80:192.168.122.22 http://mynapp.example.com
    curl: (6) Could not resolve host: mynapp.example.com:80:192.168.122.22; Unknown error
    curl: (6) Could not resolve host: mynapp.example.com; Unknown error
    
    
    $ curl --resolve mynapp.example.com:80:192.168.122.22 http://mynapp.example.com
    Message: Hello World!
    Hostname: mynapp-rs-qxhch
    Platform: linux
    Uptime: 10594
    IP: 10.233.92.12
    DNS: 169.254.25.10
    

     

     

     

    mynapp-rs.yml | 레플리카셋 컨트롤러
    apiVersion: apps/v1
    kind: ReplicaSet
    metadata:
      name: mynapp-rs
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: mynapp-rs
      template:
        metadata:
          labels:
            app: mynapp-rs
        spec:
          containers:
          - name: mynapp
            image: c1t1d0s7/myweb
            ports:
            - containerPort: 8080

     

     

    mynapp-svc-ext-nodeport.yml | NodePort 서비스 
    apiVersion: v1
    kind: Service
    metadata:
      name: mynapp-svc-ext-np
    spec:
      type: NodePort
      ports:
      - port: 80
        targetPort: 8080
        nodePort: 31111
      selector:
        app: mynapp-rs

     

    '클라우드 > kubernetes' 카테고리의 다른 글

    [k8s] 동적 볼륨 프로비저닝  (0) 2021.03.30
    [k8s] 워드프레스 구축  (0) 2021.03.16

    댓글

Designed by Tistory.