이 문서에서는 HTTP 또는 HTTPS를 통해 Azure Application Gateway를 통해 AKS(Azure Kubernetes Service) 서비스의 예를 노출하기 위해 Kubernetes 수신 리소스를 사용하는 방법을 설명합니다.
팁
Kubernetes 수신 솔루션에 컨테이너용 Application Gateway를 고려하는 것이 좋습니다.
필수 구성 요소
- 설치된
ingress-azure
Helm 차트: - 이 애플리케이션에서 HTTPS를 사용하려면 x509 인증서와 프라이빗 키가 필요합니다.
방명록 애플리케이션 배포
guestbook
애플리케이션은 웹 UI 프런트 엔드, 백 엔드, Redis 데이터베이스로 구성된 정식 Kubernetes 애플리케이션입니다.
기본적으로 guestbook
는 포트 80
에서 이름이 frontend
인 서비스를 통해 애플리케이션을 노출합니다. Kubernetes 수신 리소스가 없으면 AKS 클러스터 외부에서 서비스에 액세스할 수 없습니다. HTTP 및 HTTPS를 통해 애플리케이션을 사용하고 애플리케이션에 액세스하기 위한 수신 리소스를 설정합니다.
guestbook
애플리케이션을 배포하려면:
이 GitHub 페이지에서
guestbook-all-in-one.yaml
을 다운로드합니다.다음 명령을 실행하여
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
로 저장합니다.
다음 명령을 실행하여
ing-guestbook.yaml
을 배포합니다.kubectl apply -f ing-guestbook.yaml
배포 상태를 확인하려면 수신 컨트롤러의 로그를 확인합니다.
이제 guestbook
애플리케이션을 사용할 수 있습니다. Application Gateway 배포의 공용 주소를 방문하여 가용성을 확인할 수 있습니다.
HTTPS를 통해 서비스 공개
호스트 이름이 지정되지 않음
호스트 이름을 지정하지 않으면 Application Gateway 배포를 가리키는 모든 호스트 이름에서 guestbook
서비스를 사용할 수 있습니다.
수신 리소스를 배포하기 전에 인증서와 프라이빗 키를 호스팅할 Kubernetes 비밀을 만듭니다.
kubectl create secret tls <guestbook-secret-name> --key <path-to-key> --cert <path-to-cert>
다음 수신 리소스를 정의합니다.
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
ing-guestbook-tls.yaml
이라는 이름의 파일에 수신 리소스를 저장합니다.다음 명령을 실행하여
ing-guestbook-tls.yaml
을 배포합니다.kubectl apply -f ing-guestbook-tls.yaml
배포 상태를 확인하려면 수신 컨트롤러의 로그를 확인합니다.
이제 HTTP 및 HTTPS 둘 다에서 guestbook
애플리케이션을 사용할 수 있습니다.
호스트 이름이 지정됨
TLS 구성과 서비스를 다중화하기 위해 수신 리소스에 호스트 이름을 지정할 수도 있습니다. 호스트 이름을 지정하면 guestbook
서비스는 지정된 호스트에서만 사용할 수 있습니다.
다음 수신 리소스를 정의합니다.
secretName
섹션에서<guestbook-secret-name>
을 비밀 이름으로 바꿉니다.hosts
및host
섹션에서<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
다음 명령을 실행하여
ing-guestbook-tls-sni.yaml
을 배포합니다.kubectl apply -f ing-guestbook-tls-sni.yaml
배포 상태를 확인하려면 수신 컨트롤러의 로그를 확인합니다.
이제 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