본문 바로가기
CSP (Cloud Service Provider)/Azure

[Azure] AKS (Azure Kubernetes Service) - (5) Ingress & HPA 설정

by BTC_SUU 2023. 9. 13.

베하! 안녕하세요~
BTC_수신자표시제한 입니다 😊

지난번에 ACR에 올린 이미지를 사용해 WEB과 WAS의 YAML파일 생성하고 연동까지 진행해보았습니다!

2023.08.30 - [CSP (Cloud Service Provider)/Azure] - [Azure] AKS (Azure Kubernetes Service) - (4) WEB, WAS YAML파일 생성 및 연동

 

[Azure] AKS (Azure Kubernetes Service) - (4) WEB, WAS YAML파일 생성 및 연동

베하! 안녕하세요~ BTC_수신자표시제한 입니다 😊 지난번에 컨테이너 이미지를 ACR에 올리고 그 이미지를 가지고 컨테이너를 빌드 후 연동까지 진행해보았습니다! 2023.08.16 - [CSP (Cloud Service Provider

btcd.tistory.com

오늘은 지난번에 이어 Ingress와 HPA를 구성해보겠습니다~!


1. AGIC (Application Gateway 수신 컨트롤러)

AGIC(Application Gateway 수신 컨트롤러)는 Kubernetes 애플리케이션으로, Azure의 기본 Application Gateway L7 부하 분산 장치를 활용하여 클라우드 소프트웨어를 인터넷에 노출할 수 있도록 합니다. AGIC는 호스트되는 Kubernetes 클러스터를 모니터링하고 선택한 서비스가 인터넷에 노출되도록 Application Gateway 지속적으로 업데이트합니다.

수신 컨트롤러는 AKS에서 자체 pod로 실행됩니다. AGIC는 Kubernetes 리소스의 하위 집합에서 변경 내용을 모니터링합니다. AKS 클러스터의 상태는 Application Gateway 특정 구성으로 변환되고 ARM(Azure Resource Manager)에 적용됩니다.

 

[AGIC 설정]

Kubernetes 서비스에서 해당 aks를 선택 후 네트워킹으로 이동합니다. 그리고 수신 컨트롤러 사용을 체크 해주면 됩니다!

그러면 설정한 AGIC에 대해 ingress gateway가 자동적으로 생성됩니다!

 

[OpenSSL로 인증서 생성]

TLS(Transport Layer Security) 인증서와 키를 생성하고, 이를 Kubernetes 클러스터 내에서 사용할 수 있는 비밀 키로 저장하는 작업을 수행함으로써 Kubernetes 클러스터 내에서 HTTPS 연결을 설정합니다.

1. Ingress 컨트롤러가 TLS를 사용하려면, Ingress에 certificate 와 a private key를 연계해야 한다.
$ openssl genrsa -out tls.key 2048
$ openssl req -new -x509 -key tls.key -out tls.crt -days 365 -subj /CN=node2.example.com

2. 생성한 인증서를 secret에 기록한다.
$ kubectl create secret tls tls-secret --cert=tls.crt --key=tls.key

각 명령어에 대한 간단한 설명을 해드리겠습니다!

 

openssl genrsa -out tls.key 2048

이 명령어는 2048 비트 길이의 RSA 개인 키를 생성하고, 그 결과를 tls.key 파일에 저장합니다. 이 개인 키는 나중에 TLS 연결을 설정할 때 사용됩니다.

openssl req -new -x509 -key tls.key -out tls.crt -days 365 -subj /CN=node2.example.com

이 명령어는 새로운 X.509 자체 서명 인증서를 생성합니다. 이 인증서는 이전 단계에서 생성한 개인 키(tls.key)를 사용하여 서명됩니다. -days 365 옵션은 인증서의 유효 기간을 365일로 설정합니다. -subj 옵션은 인증서의 주체 주관 (Subject) 필드를 설정하는데, 여기서는 Common Name (CN) 필드를 /CN=node2.example.com로 설정하여 이 인증서가 "node2.example.com" 도메인에 대한 것임을 나타냅니다. 이 인증서는 임의의 인증 기관 (CA)에서 서명된 것이 아니라 자체 서명된 인증서입니다.

kubectl create secret tls tls-secret --cert=tls.crt --key=tls.key

이 명령어는 Kubernetes 클러스터 내에 tls-secret라는 비밀 키(secret)를 생성합니다. 이 비밀 키는 TLS 인증서와 개인 키를 포함하며, 이들은 나중에 Kubernetes Pod나 서비스에서 사용될 수 있습니다.

이 코드는 TLS 인증서와 개인 키를 생성하고 Kubernetes 클러스터에서 이를 사용할 수 있도록 비밀 키로 저장하는 데 사용됩니다. TLS를 사용하면 보안 통신을 구현할 수 있으며, 일반적으로 웹 서버나 애플리케이션 서비스와 같은 컨테이너화된 애플리케이션을 보호하기 위해 사용됩니다.

 

[crt → pfx로 변경]

$ openssl pkcs12 -export -in tls.crt -inkey tls.key -out www.sslcert.co.kr.pfx 
-> 입력하면 비밀번호 설장하는 칸 나옴 
-> 본인이 하고 싶은 비밀번호 설정

이 명령어를 실행하면 TLS 인증서와 개인 키가 하나의 PFX 파일에 결합되어 저장됩니다. 이 PFX 파일은 종종 웹 서버나 다른 SSL/TLS 지원 애플리케이션에서 사용되며, SSL/TLS 연결을 설정할 때 필요한 정보를 포함하고 있습니다. PFX 파일은 개인 키와 공개 인증서를 함께 보관하므로 보안에 유의해야 합니다.

 

여기까지 하면 키가 생성된 것을 확인할 수 있습니다!

 

그 다음 키를 로컬 컴퓨터에 저장해놓고 Azure 콘솔로 가서 수신기에 해당 인증서를 넣어줍니다.

우선 키를 /home/btcuser에 옮기고 파일을 다운로드합니다.

cp www.sslcert.co.kr.pfx /home/btcuser/www.sslcert.co.kr.pfx

 

저는 MobaXterm을 사용하고 있기 때문에 해당 방법으로 진행하는데, 혹시 다른 도구를 사용하신다면 그에 맞게 진행하시면 됩니다!

 

이제 다운받은 파일을 수신기에 올립니다.

Azure 콘솔에서 Application Gateway로 들어가 ingress-appgateway > 수신기로 들어가면 만들어진 수신기가 있습니다.

인증서를 업로드하고 저장하면 됩니다!

 

2. ingress.yaml 작성 및 배포

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: aspnetapp
  annotations:
    kubernetes.io/ingress.class: azure/application-gateway
spec:
  tls:
   - hosts:
     secretName: tls-secret 
  rules:
  - http:
      paths:
      - path: /
        backend:
          service:
            name: web-server-svc
            port:
              number: 80
        pathType: Prefix
$ kubectl apply -f ingress.yaml

$ kubectl get ingress

 

이렇게까지 하고 해당 https://ip로 접속하면!!

따란~

제가 앞서 만든 OpenSSL 인증서의 발급기관과 동일한 값이 들어가 있는 것을 확인할 수 있습니다!

 

여기까지하면 ingress 설정은 끝났습니다~!~!

 

3. HPA 설정

일반적으로 Kubernetes에서 Horizontal Pod Autoscaler (HPA)를 사용하려면 클러스터에 메트릭 서버를 설치해야 합니다. HPA는 Pod의 CPU 및 메모리 사용량과 같은 메트릭을 기반으로 파드 수를 조정하여 애플리케이션의 성능과 가용성을 유지합니다.

그러나 Azure Kubernetes Service(AKS)에서는 기본적으로 Kubernetes 클러스터에 메트릭 서버가 설치되어 있어서 별도로 메트릭 서버를 수동으로 설치할 필요가 없습니다. 따라서 HPA를 설정하려면 AKS 클러스터 내에서 이미 작동 중인 메트릭 서버를 활용하면 됩니다.

HPA를 설정할 때, AKS 클러스터에서 기본으로 제공되는 메트릭 서버를 사용하려면 추가 설치나 구성 작업을 할 필요가 없으며, HPA 리소스 정의에서 메트릭을 지정할 수 있습니다. 이것은 AKS의 편리한 기능 중 하나로, 클러스터 운영에 관련된 작업을 간소화합니다.

 

[webserver-hpa.yaml]

apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
  name: webserver-hpa
spec:
  maxReplicas: 10
  minReplicas: 3
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: web-server
  targetCPUUtilizationPercentage: 50
$ webserver-hpa.yaml

$ watch kubectl get hpa -o wide

자! 이제! 다양한 방법으로 부하를 주면  web의 pod가 늘어나는 것을 확인할 수 있습니다!!!!

 


여기까지 AKS로 3Tier을 구축을 진행해보았습니다~!

 

VM을 통해 Docker 이미지를 생성한 후 ACR에 Push 하고, AKS의 노드에 접속해 ACR에 올린 이미지를 Pull 해서 Web과 Was의 Pod를 구성합니다. Ingress를 통해 https 접속을 가능하게 했으며, 각각의 Web, Was Pod들은 HPA를 통해 Autoscaling을 진행했습니다!

 

5번에 거처 미니 프로젝트를 진행해보았는데

도움이 되셨으면 좋겠습니다.😊

다음에 또 만나요 👋

댓글