-
[k8s] 인그레스(Ingress) 컨트롤러클라우드/kubernetes 2021. 3. 30. 19:21728x90
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