DevOps/Kubernetes

쿠버네티스(kubernetes) ingress

알로그 2022. 5. 15. 09:39
반응형

쿠버네티스(kubernetes) ingress

 

 

인그레스(Ingress)는 일반적으로 외부에서 내부로 향하는 것을 지칭하는 단어

외부 요청을 어떻게 처리할 것인지 네트워크 7계층 레벨에서 정의하는 쿠버네티스 오브젝트

 

  • 외부 요청의 라우팅
  • 가상 호스트 기반의 요청 처리
  • SSL/TLS 보안 연결 처리

 

 

외부 요청에 대한 처리 규칙을 쿠버네티스 자체 기능으로 편리하게 관리할 수 있다는 것이 인그레이스의 핵심

$ kubectl get ing

 

<ingress-example.yaml>

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: ingress-example
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
    kubernetes.io/ingress.class: "nginx"
spec;
  rules:
  - host: alicek106.example.com 
    http:
      paths:
      - path: /echo-hostname 
        backend:
          serviceName: hostname-service 
          servicePort: 80
  • host: 해당 도메인으로 접근하는 요청에 대해서 처리 규칙을 적용
  • path: 해당 경로에 들어온 요청을 어느 서비스로 전달할 것인지 정의. 위에서는 backend로 처리함
  • serviceName, servicePort: path로 들어온 요청이 전달될 서비스와 포트

 

인그레이스 생성

$ kubectl apply -f ingress-example.yaml
$ kubectl get ingress

 

인그레스는 규칙을 적용하는 인그레스 컨트롤러와 함께 사용해야 한다.

Ngnix 웹 서버 인그레이스 컨트롤러 설치

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

https://kubetm.github.io/k8s/08-intermediate-controller/ingress/

 

 

Nginx 인그레스 컨트롤러를 설치하기 위해 다양한 쿠버네티스 리소스를 한번에 생성함

$ kubectl get pods, deployment -n ingress-nginx

 

Nginx 웹 서버를 외부에 노출하기 위한 서비스를 생성해야 한다.

<ingress-service-lb.yaml>

kind: Service
apiVersion: v1
metadata:
  name: ingress-nglnx
  namespace: ingress-nglnx
spec:
  type: loadBalancer
  selector:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
  ports:
  - name: http
    port: 80
    targetPort: http
  - name: https
    port: 443
    targetPort: https

 

생성 후 확인

$ kubectl apply -f ingress-service-lb.yaml
$ kubectl get svc -n ingress-nginx

-------------------

대세는 쿠버네티스 강의 실습

쇼핑과 고객서비스를 위한 pod, service 각각 두개 생성

apiVersion: v1
kind: Pod
metadata:
  name: pod-shopping
  labels:
    category: shopping
spec:
  containers:
  - name: container
    image: kubetm/shopping
---
apiVersion: v1
kind: Service
metadata:
  name: svc-shopping
spec:
  selector:
    category: shopping
  ports:
  - port: 8080
apiVersion: v1
kind: Pod
metadata:
  name: pod-customer
  labels:
    category: customer
spec:
  containers:
  - name: container
    image: kubetm/customer
---
apiVersion: v1
kind: Service
metadata:
  name: svc-customer
spec:
  selector:
    category: customer
  ports:
  - port: 8080

 

서비스로 curl 날려서 응답 확인

 

 

ingress 생성

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: service-loadbalancing
spec:
  ingressClassName: nginx
  rules:
  - http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: svc-shopping
            port:
              number: 8080
      - path: /customer
        pathType: Prefix
        backend:
          service:
            name: svc-customer
            port:
              number: 8080

 

ingress 생성 후 Port와 path를 통해 응답 확인

 

References:

http://www.yes24.com/Product/Goods/84927385

 

https://kubetm.github.io/k8s/08-intermediate-controller/ingress/

 

Ingress

Service Loadbalancing, Canary Upgrade

kubetm.github.io

 

반응형