본문 바로가기

⭐ Kubernetes & EKS/Ingress (잉그레스)

Ingress Annotation을 활용한 ssl 적용하기

# 해당 작업이 필요한 이유?

- AWS EKS는 AWS 영역과 K8s 영역이 나누어져 있다.

한마디로 이야기 하자면, 서로 다른 영역을 연결을 해놓았다 라고 이해하면 쉽다.

그 연결고리가 바로 Application LoadBalancer 즉 ALB 라고 생각한다.

# Ingress에 SSL을 적용하게된 이유는?

Ingress에 SSL을 적용하게 된 이유는 간단하다.

EKS의 노드의 숫자를 수동으로 조정하거나 어떤 정보를 변경 했을때 로드 밸런서의 리스너 정보가 초기화가 되는 현상이 발생 했다. 여러번 반복되다 보니 해결책을 찾아야 했다.

# 그렇다면, 왜 노드그룹 정보를 변경하거나 인스턴스의 갯수를 수동으로 조정 등 했을 뿐인데 ALB의 리스너가 초기화가 되었을까?

ALB에서는 CORS에 대해 지원을 해주지 않는다. 그래서 Application단에서 직접 설정을 해줘야 한다.

정확하진 않다. 하지만 거의 맞을거 같은데, EKS는 AWS의 영역과 K8s의 영역이 나누어져 있어서 발생 했을 것이다.

나누어져 있다는 것은 예를들어 AWS EKS의 노드그룹의 정보를 변경하면 (노드 숫자를 조정) EKS는 해당 리소스를 재 배치 한다. 늘어나거나 줄어든 노드의 갯수에 맞게 파드를 재 배치하여 구동한다.

여기서, 재 배치 한다는것은 K8s에 정의되어 있지 않고 수동으로 AWS 자원을 설정 했다면, K8s의 리소스가 재 배치 되면서 초기화가 이루어 지게 된다.

말이 좀 어려운데, 간단하게 말하자면 예를들어 ingress yaml 파일로 ssl을 생성하지 않고 aws 콘솔에서 ssl을 설정 했다면, eks 노드그룹을 변경 시 ingress yaml 파일로 설정한 내역 외의 것들은 초기화가 될것이다.

# 그래서~ ingress.yaml 파일에 ssl을 설정하자.

- ingress.yaml

- 여기서 주의해야할 점은 해당 서비스의 프로세스의 흐름대로 http path 설정을 진행해 줘야 한다.

예를들어 web 서비스가 가장 처음에 /api를 호출해서 어떤 행위를 할 경우 아래처럼 /api를 먼저 호출 하도록 rules를 정해줘야 한다. (한마디로 프로세스의 흐름대로 설정을 진행 해야한다.)

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: test-web-ingress
  annotations:
    kubernetes.io/ingress.class: alb
    alb.ingress.kubernetes.io/scheme: internet-facing
    alb.ingress.kubernetes.io/target-type: instance
    alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}, {"HTTPS": 443}]'
    alb.ingress.kubernetes.io/actions.ssl-redirect: '{"Type": "redirect", "RedirectConfig": { "Protocol": "HTTPS", "Port": "443", "StatusCode": "HTTP_301"}}'
    alb.ingress.kubernetes.io/certificate-arn: {aws acm arn 정보 입력}
    alb.ingress.kubernetes.io/ssl-policy: ELBSecurityPolicy-2016-08
  namespace: test
spec:
  rules:
    - host: test.co.kr #route53에 등록된 도메인 명이나, 기타 DNS주소 입력
    - http:
        paths:
          - path: /api
            pathType: Prefix
            backend:
              service:
                name: "test-api-service-alb"
                port:
                  number: 8080
          - path: /
            pathType: Prefix
            backend:
              service:
                name: "test-web-service"
                port:
                  number: 80

# ALB  어노테이션은 아래의 링크를 확인

https://guide-fin.ncloud-docs.com/docs/k8s-k8suse-albingress

 

ALB Ingress Controller 설정

 

guide-fin.ncloud-docs.com

- 끝 -