카테고리 없음

Kubernetes Ingress

pioneerxj 2023. 9. 8. 17:01

ingress는 L7에서 동작하며 service는 L4에서 동작한다.

L7로 작동하는 Ingress는 헤더 조작이 가능하여 원하는 URL param으로 라우팅이 가능하다.

ingress service -> ingress pod -> app service -> app pod

 

 

Ingress Install

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

$ kubectl config use-context ingress-admin@kubernetes
$ k create deploy nginx1 --image=nginx
$ k create deploy nginx2 --image=nginx
$ k expose deployment nginx1 --name=svc1 \
 --port=80 --type=NodePort
 $ k expose deployment nginx2 --name=svc2 \
 --port=80 --type=NodePort
 $ k get svc -o wide

1. ingress nginx를 통해 접속에 성공한 클라이언트가 도메인 기반 nginx 페이지에 접속하도록 각 nginx 기반 svc1과 svc2 그리고 Pod를 두 개씩 생성하고
2. 이를 Service 포트 접속을 통해 nginx가 정상적으로 동작 중인지 확인한다. 그러나 이 경우 svc1과 svc2서비스가 제공하는 NodePort 로 접속하면 그 결과가 같으므로 만약 그 결과의 차이를 확인할 경우 각 nginx의 index.html 파일을 다르게 생성해서 테스트를 진행한다.
3. 이 소스코드는 ingress nginx를 설치하기 위해 다운로드해서 실행하면 여러 오브젝트와 컨테이너가 생성되는 것을 확인한다.
4. 위의 코드가 정상적으로 동작했는지 그 결과를 확인하는데 Service ingress nginx controlle의 ExternalIP가 Pending 으로 나오는데 이는 IP 할당을 기다리기 때문이며 계속 이 상태에서도 테스트는 성공한다.
5. IngressClass의 경우 Ingress 생성시에 필요하므로 그 이름을 확인한다.

 

Ingress 생성하기

$ vi ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-nginx
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  ingressClassName: nginx
  rules:
    - host: foo.bar.com
      http:
        paths:
          - path: /foo
            pathType: Prefix
            backend:
              service:
                name: svc1
                port:
                  number: 80
          - path: /bar
            pathType: Prefix
            backend:
              service:
                name: svc2
                port:
                  number: 80
$ k apply -f ingress.yaml
$ k get ingress

$ k describe ingress