공부합시다!/Kubernetes

Kubernetes (K8S): Object - 5. Ingress

간서치 2022. 6. 14. 06:21
728x90

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. 실습 구성도

ingress 구성도

 

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.yaml

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.7.0/deploy/static/provider/baremetal/deploy.yaml

위의 방법은 다운로드 후 바로 설치가 되서 파일이 남지 않게 됩니다.

# wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.5.1/deploy/static/provider/aws/deploy.yaml 

# wget kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.7.0/deploy/static/provider/baremetal/deploy.yaml

# wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.8.0/deploy/static/provider/baremetal/deploy.yaml

# wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.8.2/deploy/static/provider/baremetal/deploy.yaml

kubectl 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