다음을 통해 공유


Application Gateway를 사용하여 HTTP 또는 HTTPS를 통해 AKS 서비스 노출

이 문서에서는 HTTP 또는 HTTPS를 통해 Azure Application Gateway를 통해 AKS(Azure Kubernetes Service) 서비스의 예를 노출하기 위해 Kubernetes 수신 리소스를 사용하는 방법을 설명합니다.

Kubernetes 수신 솔루션에 컨테이너용 Application Gateway를 고려하는 것이 좋습니다.

필수 구성 요소

  • 설치된 ingress-azure Helm 차트:
    • 녹색필드 배포: 처음부터 시작하는 경우 이 설치 지침을 참조하세요. 이 지침에서는 Application Gateway와 함께 AKS 클러스터를 배포하고 AKS 클러스터에 AGIC(Application Gateway 수신 컨트롤러)를 설치하는 단계를 설명합니다.
    • 브라운필드 배포: 기존 AKS 클러스터와 Application Gateway 배포가 있는 경우 이 지침을 참조하여 AKS 클러스터에 AGIC를 설치합니다.
  • 이 애플리케이션에서 HTTPS를 사용하려면 x509 인증서와 프라이빗 키가 필요합니다.

방명록 애플리케이션 배포

guestbook 애플리케이션은 웹 UI 프런트 엔드, 백 엔드, Redis 데이터베이스로 구성된 정식 Kubernetes 애플리케이션입니다.

기본적으로 guestbook는 포트 80에서 이름이 frontend인 서비스를 통해 애플리케이션을 노출합니다. Kubernetes 수신 리소스가 없으면 AKS 클러스터 외부에서 서비스에 액세스할 수 없습니다. HTTP 및 HTTPS를 통해 애플리케이션을 사용하고 애플리케이션에 액세스하기 위한 수신 리소스를 설정합니다.

guestbook 애플리케이션을 배포하려면:

  1. 이 GitHub 페이지에서 guestbook-all-in-one.yaml을 다운로드합니다.

  2. 다음 명령을 실행하여 guestbook-all-in-one.yaml을 AKS 클러스터에 배포합니다.

    kubectl apply -f guestbook-all-in-one.yaml
    

HTTP를 통해 서비스 공개

guestbook 애플리케이션을 노출하려면 다음 수신 리소스를 사용합니다.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: guestbook
  annotations:
    kubernetes.io/ingress.class: azure/application-gateway
spec:
  rules:
  - http:
      paths:
      - backend:
          serviceName: frontend
          servicePort: 80

이 수신은 guestbook-all-in-one 배포의 frontend 서비스를 Application Gateway 배포의 기본 백 엔드로 노출합니다.

이전 수신 리소스를 ing-guestbook.yaml로 저장합니다.

  1. 다음 명령을 실행하여 ing-guestbook.yaml을 배포합니다.

    kubectl apply -f ing-guestbook.yaml
    
  2. 배포 상태를 확인하려면 수신 컨트롤러의 로그를 확인합니다.

이제 guestbook 애플리케이션을 사용할 수 있습니다. Application Gateway 배포의 공용 주소를 방문하여 가용성을 확인할 수 있습니다.

HTTPS를 통해 서비스 공개

호스트 이름이 지정되지 않음

호스트 이름을 지정하지 않으면 Application Gateway 배포를 가리키는 모든 호스트 이름에서 guestbook 서비스를 사용할 수 있습니다.

  1. 수신 리소스를 배포하기 전에 인증서와 프라이빗 키를 호스팅할 Kubernetes 비밀을 만듭니다.

    kubectl create secret tls <guestbook-secret-name> --key <path-to-key> --cert <path-to-cert>
    
  2. 다음 수신 리소스를 정의합니다. secretName 섹션에서 <guestbook-secret-name>을 비밀 이름으로 바꿉니다.

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: guestbook
      annotations:
        kubernetes.io/ingress.class: azure/application-gateway
    spec:
      tls:
        - secretName: <guestbook-secret-name>
      rules:
      - http:
          paths:
          - backend:
              serviceName: frontend
              servicePort: 80
    
  3. ing-guestbook-tls.yaml이라는 이름의 파일에 수신 리소스를 저장합니다.

  4. 다음 명령을 실행하여 ing-guestbook-tls.yaml을 배포합니다.

    kubectl apply -f ing-guestbook-tls.yaml
    
  5. 배포 상태를 확인하려면 수신 컨트롤러의 로그를 확인합니다.

이제 HTTP 및 HTTPS 둘 다에서 guestbook 애플리케이션을 사용할 수 있습니다.

호스트 이름이 지정됨

TLS 구성과 서비스를 다중화하기 위해 수신 리소스에 호스트 이름을 지정할 수도 있습니다. 호스트 이름을 지정하면 guestbook 서비스는 지정된 호스트에서만 사용할 수 있습니다.

  1. 다음 수신 리소스를 정의합니다. secretName 섹션에서 <guestbook-secret-name>을 비밀 이름으로 바꿉니다. hostshost 섹션에서 <guestbook.contoso.com>을 호스트 이름으로 바꿉니다.

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: guestbook
      annotations:
        kubernetes.io/ingress.class: azure/application-gateway
    spec:
      tls:
        - hosts:
          - <guestbook.contoso.com>
          secretName: <guestbook-secret-name>
      rules:
      - host: <guestbook.contoso.com>
        http:
          paths:
          - backend:
              serviceName: frontend
              servicePort: 80
    
  2. 다음 명령을 실행하여 ing-guestbook-tls-sni.yaml을 배포합니다.

    kubectl apply -f ing-guestbook-tls-sni.yaml
    
  3. 배포 상태를 확인하려면 수신 컨트롤러의 로그를 확인합니다.

이제 guestbook 애플리케이션은 지정된 호스트에서만 HTTP와 HTTPS 모두에서 사용할 수 있습니다.

다른 서비스와 통합

다음 수신 리소스를 사용하여 경로를 추가하고 해당 경로를 다른 서비스로 리디렉션합니다.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: guestbook
  annotations:
    kubernetes.io/ingress.class: azure/application-gateway
spec:
  rules:
  - http:
      paths:
      - path: </other/*>
        backend:
          serviceName: <other-service>
          servicePort: 80
       - backend:
          serviceName: frontend
          servicePort: 80