개요
NGINX Ingress 컨트롤러는 NGINX를 사용하여 Kubernetes 클러스터의 HTTP 서비스에 대한 외부 액세스를 관리하는 Ingress 컨트롤러입니다. kubernetes에서 서비스를 생성하면 -service-node-port-range(default 30000~32767) 범위내에서 서비스에 포트를 할당하게 된다. 이 경우 웹서비스에 접근하기 위해서는 http://{IP}:{NodePort} 형태로 실제로 서비스하기에는 부적접한 url 입니다. NGINX Ingress를 사용하여 일반적인 http://www.doman.com형태로 서비스하는 방법에 대해 알아 보도록 하겠습니다.
구성환경
minikube v1.9.0, kubectl v1.18.0, CentOS 7.6
참고 문서 : https://kubernetes.io/docs/tasks/access-application-cluster/ingress-minikube/
1. ingress controller 설치
- 설치
shell> minikube addons enable ingress * The 'ingress' addon is enabled shell> |
- 확인
shell> kubectl get pod -n kube-system NAME READY STATUS RESTARTS AGE coredns-66bff467f8-c2mf6 1/1 Running 14 9d coredns-66bff467f8-gsmpt 1/1 Running 14 9d etcd-testsvr 1/1 Running 13 9d kube-apiserver-testsvr 1/1 Running 13 9d kube-controller-manager-testsvr 1/1 Running 13 9d kube-proxy-4k244 1/1 Running 14 9d kube-scheduler-testsvr 1/1 Running 14 9d metrics-server-7bc6d75975-t5shr 1/1 Running 6 5d2h nginx-ingress-controller-6d57c87cb9-4xb88 1/1 Running 0 7s storage-provisioner 1/1 Running 25 9d [root@testsvr mysql]# |
2. 앱 배포
2.1 첫번째 hello,World 배포
shell> kubectl run web --image=gcr.io/google-samples/hello-app:1.0 --port=8080 pod/web created shell> kubectl expose pod web --target-port=8080 service/web exposed shell> |
2.2 두번째 hello,World 앱 배포
shell> kubectl run web2 --image=gcr.io/google-samples/hello-app:2.0 --port=8080 pod/web created shell> kubectl expose pod web2 --target-port=8080 service/web2 exposed shell> |
2.3 Pod 및 서비스 확인
shell> kubectl get pod NAME READY STATUS RESTARTS AGE web 1/1 Running 0 5m20s web2 1/1 Running 0 5m13s shell> kubectl get service NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 443/TCP 9d web ClusterIP 10.105.13.154 8080/TCP 3m33s web2 ClusterIP 10.105.146.106 8080/TCP 3m36s shell> |
3. Ingress resource 생성
3.1 example-ingress.yaml 파일
apiVersion: networking.k8s.io/v1beta1 # for versions before 1.14 use extensions/v1beta1 kind: Ingress metadata: name: example-ingress annotations: nginx.ingress.kubernetes.io/rewrite-target: /$1 spec: rules: - host: hello-world.info http: paths: - path: / backend: serviceName: web servicePort: 8080 - path: /v2/* backend: serviceName: web2 servicePort: 8080 |
* dns 서버를 운영중이라면 host: 필드에 자신의 dns 주소로 변경하여도 된다. 여기서는 dns 대신 /etc/hosts 파일을 사용하였다.
3.2 ingress resource 생성
shell> kubectl apply -f example-ingress.yaml ingress.networking.k8s.io/example-ingress created shell> |
3.3 /etc/hosts 파일에 hello-world.info ip 추가
192.168.0.167 hello-world.info |
3.4 ingress의 ADDRESS IP가 정상적으로 설정되었는지 확인
shell> kubectl get ingress NAME CLASS HOSTS ADDRESS PORTS AGE example-ingress hello-world.info 192.168.0.167 80 15m shell> |
* ADDRESS 부분은 환경에 따라 결과값이 표시되는데 1~2분 정도 걸릴수 있다.
4. 테스트
4.1 첫번째 웹에 접속
shell> curl hello-world.info/ Hello, world! Version: 1.0.0 Hostname: web shell> |
4.2 두번째 웹에 접속
shell> curl hello-world.info/v2/ Hello, world! Version: 2.0.0 Hostname: web2 shell> |
위와 같은 결과가 나온다면 당신은 성공한 것이다.
다음시간에는 HTTPS 트래픽에 대한 로드 분산기를 구성하는 방법에 대해서 알아 보도록 하자.
'가상화 > Kubernetes' 카테고리의 다른 글
[kubernetes] 인그레스(Ingress)를 사용하여 HTTP(S) 부하 분산기 구성 #2 - HTTPS 부하 분산 (0) | 2020.04.07 |
---|---|
[Docker] 컨테이너와 로컬 파일 시스템간에 파일 / 폴더 복사 (0) | 2020.04.06 |
[Docker] docker-compose 활용 (0) | 2020.04.04 |
[Docker] Priviate registry 구성 #3 - 인증 구성 (0) | 2020.04.03 |
[Docker] Private registry 이미지 삭제 (4) | 2020.04.02 |