다음을 통해 공유


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

이 문서에서는 KUbernetes 수신 리소스사용하여 HTTP 또는 HTTPS를 통해 Azure 애플리케이션 게이트웨이를 통해 AKS(Azure Kubernetes Service) 서비스 예제를 노출하는 방법을 보여 줍니다.

Kubernetes 수신 솔루션에 대한 컨테이너용 Application Gateway를 고려합니다.

필수 조건

  • 설치된 ingress-azure Helm 차트:
    • Greenfield 배포: 처음부터 시작하는 경우 Application Gateway를 사용하여 AKS 클러스터를 배포하고 AKS 클러스터에 AGIC(Application Gateway 수신 컨트롤러)를 설치하는 단계를 간략하게 설명하는 이러한 설치 지침을 참조하세요.
    • Brownfield 배포: 기존 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. 다음 명령을 실행하여 AKS 클러스터에 배포 guestbook-all-in-one.yaml 합니다.

    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

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

위의 수신 리소스를 다음과 같이 ing-guestbook.yaml저장합니다.

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

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

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

HTTPS를 통해 서비스 공개

지정된 호스트 이름 없이

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

  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