-
Kubernetes (K8S): Object - 5. Ingress공부합시다!/Kubernetes 2022. 6. 14. 06:21728x90
Cluster 내의 서비스에 대한 외부 접근을 관리하는 API 오브젝트이며, 일반적으로 HTTP를 관리함.
Ingress 는 LoadBalancer, SSL Terminated, Named 기반의 가상 호스팅을 제공할 수 있다.
1. 정의
1.1. Cluster 외부에서 Cluster 내부 서비스로 HTTP와 HTTPS 경로 노출.
1.2. 구성요소
1.2.1. Ingress Resource
1.2.2. Ingress Controller
1.3. 단일 POD 노출의 경우 Kubectl expose 와 비슷한 효과
1.4. 복잡한 상황시 Ingress가 더 많은 기능 제공
1.5. Ingress Controller 종류
1.5.1. GCE용 : ingress-gce
1.5.2. NGINX용 : ingress-nginx
2. 실습 구성도
3. ingress-nginx 설치
3.1. ingress-download
https://kubernetes.github.io/ingress-nginx/deploy/
사이트에서 baremetal 용 다운로드
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.5.1/deploy/static/provider/aws/deploy.yamlkubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.7.0/deploy/static/provider/baremetal/deploy.yaml
위의 방법은 다운로드 후 바로 설치가 되서 파일이 남지 않게 됩니다.
# wget kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.7.0/deploy/static/provider/baremetal/deploy.yamlkubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.12.0-beta.0/deploy/static/provider/baremetal/deploy.yaml
deploy.yaml 파일 다운로드 후
# kubectl apply -f deploy.yaml 로 설치 하실 것을 권장합니다.
3.2. 설치 확인
# kubectl get namespace # kubectl get all -n ingress-nginx
4. 설정
4.1. ingess 파일 설정
4.1.1. # vi ingress.yml
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: test annotations: nginx.ingress.kubernetes.io/rewrite-target: / kubernetes.io/ingress.class: "nginx" spec: rules: - http: paths: - path: /foo pathType: Prefix backend: service: name: svc1 port: number: 80 - path: /bar pathType: Prefix backend: service: name: svc2 port: number: 80
4.2. deployment 및 service 생성
4.2.1. nginx 1 deployment 생성 -> replicas 3으로 변경시 구성도와 동일하게 됨.
4.2.2. svc1 Service 생성
4.2.3. 동일하게 nginx deployment와 Service 생성
# kubectl create deployment nginx1 --image nginx --replicas 1 --namespace ingress-nginx # kubectl expose deployment nginx1 --name svc1 --port 80 --namespace ingress-nginx # kubectl create deployment nginx2 --image nginx --replicas=1 --namespace ingress-nginx # kubectl expose deployment nginx2 --name svc2 --port 80 --namespace ingress-nginx
4.3. pod, service, deployment, replicas 확인
4.3.1. 특히 ingress-nginx-controller의 port 확인
# kubectl get all -n ingress-nginx
5. Test
5.1. http://모든nodeip:ingress-nginx-controllerport/foo
5.2. http://모든nodeip:ingress-nginx-controllerport/foo
5.3. 설정 변경 후 Test
5.3.1. /foo pod 편집 후 테스트 하기
5.3.2. /foo pod NAME 확인, 접속, index.html 편집
# kubectl -n ingress-nginx exec nginx1-7565df6456-5rwwp -it -- bash # cat > /usr/share/nginx/html/index.html << EOF > <html> > <body> > <h1>K8S-WEBSERVER-/foo</h1> > </body> > </html> > EOF
5.4. 설정 변경 후 테스트
/bar pod은 여러분이 직접 수정해 보세요.
명령어만 된 부분은 반드시 yml 파일로 수정해서 테스트 해보시기 바랍니다.
완전히 실습이 끝났으면 resource 들을 삭제하시기 바랍니다.
# kubectl delete deployment nginx1 nginx2 -n ingress-nginx # kubectl delete svc svc1 svc2 -n ingress-nginx # kubectl delete -f ingress.yml -n ingress-nginx
ㅎㅎ 아마도 못해서 몇날 몇일 괴로워하시던 분들 많으실 겁니다.
Have a nice day!
728x90'공부합시다! > Kubernetes' 카테고리의 다른 글
Kubernetes (K8S): Object - 7. Node (0) 2022.06.16 Kubernetes (K8S): Object - 6-2. Storage: hostpath (0) 2022.06.15 Kubernetes (K8S): Object - 4. Service (0) 2022.06.13 Kubernetes (K8S): Object - 3. Deployment (0) 2022.06.12 Kubernetes (K8S): Object - 1. NameSpace (0) 2022.06.10