실습

Ingress-NGINX Controller

Introduction

  1. Helm 차트 리포지토리 추가

    {
        helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
        helm repo update
    }
  2. Ingress-NGINX Controller 설치

    helm install ingress-nginx ingress-nginx/ingress-nginx -n kube-system \
    --set controller.service.annotations.service\\.beta\\.kubernetes\\.io/aws-load-balancer-type=nlb
  3. 배포된 구성요소 확인

    kubectl -n kube-system get all -l app.kubernetes.io/name=ingress-nginx
  4. 생성된 Service 확인

    kubectl -n kube-system get svc ingress-nginx-controller
  5. 생성된 NLB 상세 내용 확인

    aws elbv2 describe-load-balancers --names \
    $(kubectl -n kube-system get svc ingress-nginx-controller \
    -o jsonpath='{.status.loadBalancer.ingress[0].hostname}' \
    | grep -o -E '^[a-z0-9]+' ) --no-cli-pager
  6. 웹 브라우저를 열고 Service의 External IP 주소로 접속 - 아래의 명령어로 주소 확인 가능

    kubectl -n kube-system get svc ingress-nginx-controller \
    -o jsonpath='{.status.loadBalancer.ingress[0].hostname}{"\n"}' 
  7. 생성된 NGINX Ingress Controller Pod에서 실행중인 프로세스 확인

    kubectl -n kube-system exec deploy/ingress-nginx-controller -- \
    ps aux
  8. NGINX 설정 파일 리뷰

    kubectl -n kube-system exec deploy/ingress-nginx-controller -- \
    cat /etc/nginx/nginx.conf
  9. 생성된 NLB 주소로 접속했을때 404 Not Found가 나오는 이유 확인

    kubectl -n kube-system exec deploy/ingress-nginx-controller -- \
    cat /etc/nginx/nginx.conf | grep 404 -B 9 -A 2

Virtual hosting

  1. Deployment 생성

  2. Service 생성

  3. 생성된 Service 확인

  4. Ingress 생성

  5. 생성된 Ingress 확인

  6. NGINX Ingress Controller 로그 확인

  7. 생성된 IngressClass 확인

  8. Ingress 수정 - IngressClass 명시

  9. Ingress 객체에 발생한 Event 확인

  10. NGINX Ingress Controller 엔드포인트 확인

  11. NGINX Ingress Controller 로그 확인

  12. Ingress에 명시한 Host 주소를 HTTP 헤더값에 추가하고 NGINX Ingress Controller 엔드포인트 호출

  13. NGINX 설정 파일에 위에서 명시한 Host들에 대한 설정들이 추가 되었는지 확인

  14. Ingress 삭제

  15. NGINX 설정 파일에 위에서 삭제한 Ingress 명시한 Host들에 대한 설정들이 삭제 되었는지 확인

  16. 리소스 삭제

Path based routing

  1. 리소스 생성

  2. 생성된 리소스 확인

  3. Ingress 생성

  4. Ingress 객체에 발생한 Event 확인

  5. NGINX Ingress Controller 로그 확인

  6. Ingress에 명시한 Host 주소를 HTTP 헤더값에 추가하고 각각의 경로로 NGINX Ingress Controller 엔드포인트 호출

  7. NGINX Ingress Controller 로그 확인

    e.g.

  8. NGINX Ingress Controller 로그 확인

  9. Ingress에 명시한 Host 주소를 HTTP 헤더값에 추가하고 각각의 경로로 NGINX Ingress Controller 엔드포인트 호출

  10. 새로운 리소스 생성

  11. 새로 배포한 애플리케이션 호출

  12. Ingress 수정

  13. NGINX Ingress Controller 로그 확인

  14. Ingress에 명시한 Host 주소를 HTTP 헤더값에 추가하고 새롭게 명시한 경로들로 NGINX Ingress Controller 엔드포인트 호출

  15. 리소스 삭제

TLS/SSL

  1. CFSSL 설치

  2. CA 인증서 및 CA 사설키 생성

  3. CA 설정파일 생성

  4. 인증서 생성요청 설정파일 생성

  5. 인증서 및 사설키 생성

  6. Secret 생성

  7. 데모 웹사이트 배포

  8. 생성된 리소스 확인

  9. Ingress 생성

  10. Ingress 생성 확인 - ADDRESS에 NGINX Ingress Controller 엔드포인트가 업데이트 되는지 확인

  11. Ingress에 명시한 Host 주소를 호출하면 NGINX Ingress Controller 엔드포인트로 연결되도록 하고 프로토콜로 데모 웹사이트 호출

  12. 리소스 삭제

Clean up

  1. NGINX Ingress Controller 삭제

AWS Load Balancer Controller

Introduction

  1. EKS 클러스터가 생성되어 있는 AWS 계정번호 확인하고 환경변수로 저장

  2. Node에 부여된 Label을 통해서 EKS 클러스터 이름 확인하고 환경변수로 저장

  3. IAM OIDC 제공자 생성

  4. AWS Load Balancer Controller에 부여할 IAM 권한이 명시된 JSON 파일 다운로드

  5. 다운받은 IAM 정책 JSON 파일 리뷰

  6. IAM 정책 생성

  7. 이미 IAM 정책이 존재할 경우 정책 문서 업데이트

  8. ServiceAccount 생성

  9. Helm이 설치되어 있지 않을 경우에는 아래의 명령어로 Helm 설치

  10. EKS 리포지토리 추가

  11. 위에서 추가한 리포지토리가 추가되었는지 확인

  12. 위에서 추가한 리포지토리에 있는 Helm 차트 목록 확인

  13. AWS Load Balancer Controller 설치

  14. AWS Load Balancer Controller 로그 확인

  15. 데모 웹사이트 배포

  16. 생성된 리소스 확인

  17. Ingress 생성

  18. 생성된 Ingress 확인

  19. 위에서 생성한 Ingress에 발생한 Event 확인

  20. AWS Load Balancer Controller 로그 확인

  21. Ingress 수정

  22. Ingress 상태 확인

  23. Ingress에 발생한 Event 확인

  24. AWS Load Balancer Controller 로그 확인

  25. 아래의 명령어를 실행해서 생성된 ALB 엔드포인트를 확인하고 웹브라우저를 통해서 접근이 되는지 확인

  26. 생성된 ALB 이름을 확인하고 환경변수로 저장

  27. ALB의 상세 내용 확인

  28. ALB의 Scheme 확인

  29. ALB가 생성된 서브넷 확인

  30. ALB가 생성된 서브넷에 부여된 태그 확인

  31. AWS Load Balancer Controller가 ALB를 생성한 서브넷을 선택하는 방법 확인 - https://kubernetes-sigs.github.io/aws-load-balancer-controller/latest/deploy/subnet_discovery

  32. AWS Load Balancer Controller로 Ingress 생성할때 요구되는 파라미터 및 기본값 확인 - https://kubernetes-sigs.github.io/aws-load-balancer-controller/latest/guide/ingress/annotations

  33. Ingress 수정

  34. Ingress에 발생한 Event 확인

  35. AWS Load Balancer Controller 로그 확인

  36. 아래의 명령어를 실행해서 생성된 ALB 엔드포인트를 확인하고 웹브라우저를 통해서 접근이 되는지 확인

  37. 기존에 생성된 ALB가 존재하는지 확인

  38. 새롭게 생성된 ALB의 ARN를 확인하고 환경변수로 저장

  39. 아파치 웹서버 배포

  40. Ingress 수정

  41. 아래의 명령어를 실행해서 생성된 ALB 엔드포인트를 확인하고 웹브라우저를 통해서 접근이 되는지 확인

  42. cURL 명령어로 Host 값을 nginx.example.com으로 명시하고 ALB 엔드포인트 호출

  43. cURL 명령어로 Host 값을 httpd.example.com으로 명시하고 ALB 엔드포인트 호출

  44. ALB의 리스너 ARN를 확인하고 환경변수로 저장

  45. ALB 리스너 확인

  46. ALB 리스너 규칙 확인

  47. ALB에 연동된 대상그룹들의 ARN을 확인하고 환경변수로 저장

  48. 대상그룹 확인

  49. 대상그룹에 포함된 대상 목록 확인

  50. Pod 목록 확인

  51. 아파치 Deployment의 Replica 갯수를 3개로 조정

  52. Pod 목록 확인

  53. 대상그룹에 포함된 대상 목록 확인

  54. Ingress 삭제

  55. AWS Load Balancer Controller 로그 확인

  56. ALB가 삭제되었는지 확인

  57. 리소스 삭제

IngressGroup

  1. Ingress 생성

  2. 생성된 Ingress 확인

  3. 위에서 생성한 Ingress에 발생한 Event 확인

  4. AWS Load Balancer Controller 로그 확인

  5. 아래의 명령어를 실행해서 생성된 ALB 엔드포인트를 확인하고 웹브라우저를 통해서 접근이 되는지 확인

  6. Product 서비스 배포

  7. 리소스가 정상적으로 생성되었는지 확인

  8. /product 경로로 접속할 경우 위에 배포한 서비스로 연결되도록 Ingress 생성

  9. 생성된 Ingress 확인

  10. 위에서 생성한 Ingress에 발생한 Event 확인

  11. AWS Load Balancer Controller 로그 확인

  12. Ingress 수정

  13. Ingress 확인

  14. Ingress에 발생한 Event 확인

  15. 처음에 생성한 Ingress의 ALB 엔드포인트에 방금 생성한 Ingress에 명시한 경로로 웹브라우저를 통해서 접근이 되는지 확인 - 아래의 명령어로 주소 확인 가능

  16. Product 서비스의 로그 확인

  17. Product 서비스의 루트 경로 호출

  18. Product 서비스의 /product 경로 호출

  19. Product 서비스 수정

  20. Product 서비스의 루트 경로 호출

  21. Product 서비스의 /product 경로 호출

  22. 처음에 생성한 Ingress의 ALB 엔드포인트에 /product 경로로 웹브라우저를 통해서 접근이 되는지 확인 - 아래의 명령어로 주소 확인 가능

  23. Payment 서비스 배포

  24. 리소스가 정상적으로 생성되었는지 확인

  25. /payment 경로로 접속할 경우 위에 배포한 서비스로 연결되도록 Ingress 생성

  26. 생성된 Ingress 확인

  27. 위에서 생성한 Ingress에 발생한 Event 확인

  28. AWS Load Balancer Controller 로그 확인

  29. 처음에 생성한 Ingress의 ALB 엔드포인트에 /payment 경로로 웹브라우저를 통해서 접근이 되는지 확인 - 아래의 명령어로 주소 확인 가능

  30. 위에서 개별로 생성한 3개의 Ingress들이 동일한 ALB를 사용하는지 확인

  31. 리소스 삭제

Last updated