이 주제에서는 Apigee Hybrid에 사용할 수 있도록 SNI 이외의 클라이언트를 사용 설정하는 방법을 설명합니다.
SNI 이외의 클라이언트 구성 방법
이 섹션에서는 Apigee Hybrid에서 SNI(서버 이름 표시) 이외의 클라이언트의 지원을 사용 설정하는 방법을 설명합니다.
SNI는 초기 TLS 핸드셰이크 중에 TLS 피어 (클라이언트)가 연결하려는 호스트 이름을 지정하는 방법을 정의합니다. SNI는 2003년부터 TLS의 일부였습니다. SNI 이전에는 TLS 피어가 핸드셰이크를 시작하기 위해 HELLO를 전송하면 수신 피어가 항상 동일한 사용자 인증 정보로 응답했습니다. SNI는 단일 부하 분산기가 TLS 연결 관리를 위해 여러 개의 개별 호스트 이름과 사용자 인증 정보 집합을 지원할 수 있도록 도입되었습니다. 이제 대부분의 TLS 클라이언트에서 SNI를 사용합니다.
예외가 있습니다. 예를 들어 Google Cloud 부하 분산기는 SNI가 아닌 핸드셰이크를 사용하여 백엔드에 연결합니다.
Apigee Hybrid가 Google Cloud Load Balancer의 백엔드이거나 Apigee Hybrid가 다른 SNI 이외의 클라이언트를 지원해야 하기 때문에 SNI를 사용하지 않는 TLS 핸드셰이크를 처리할 수 있도록 Apigee Hybrid를 구성하려면 아래 설명된 단계를 따르세요. SNI 이외의 협상은 대체로 작동합니다. Apigee Hybrid는 SNI를 사용하지 않는 클라이언트에 이를 사용합니다.
ApigeeRoute
리소스를 만듭니다.enableNonSniClient
가true
로 설정되었는지 확인합니다.apiVersion: apigee.cloud.google.com/v1alpha1 kind: ApigeeRoute metadata: name: ROUTE_NAME namespace: APIGEE_NAMESPACE spec: hostnames: - "*" ports: - number: 443 protocol: HTTPS tls: credentialName: CREDENTIAL_NAME mode: SIMPLE #optional minProtocolVersion: TLS_AUTO selector: app: apigee-ingressgateway enableNonSniClient: true
각 항목의 의미는 다음과 같습니다.
- ROUTE_NAME은 커스텀 리소스(CR)에 지정하는 이름입니다.
- CREDENTIAL_NAME은 virtualhost에 대해 TLS 사용자 인증 정보를 포함하는 클러스터에 배포된 Kubernetes 보안 비밀의 이름입니다. 다음
kubectl
명령어를 사용하여 사용자 인증 정보 이름을 찾을 수 있습니다.kubectl -n APIGEE_NAMESPACE get ApigeeRoutes -o=yaml | grep credentialName
hostnames
는 와일드 카드 '*'로 설정해야 합니다.
- 재정의 파일을 열고 다음 단계에 설명된 변경을 수행합니다.
- 각 환경 그룹에 대해 ApigeeRoute 이름을
additionalGateways
속성에 추가합니다. 예를 들면 다음과 같습니다.virtualhosts: - name: default sslCertPath: ./certs/fullchain.pem sslKeyPath: ./certs/privkey.pem additionalGateways: ["ROUTE_NAME"]
- CRD 파일을 저장합니다. 예를 들면
ApigeeRoute.yaml
입니다. - CRD를 클러스터에 적용합니다.
kubectl apply -f ApigeeRoute.yaml -n APIGEE_NAMESPACE
- 변경사항을
virtualhosts
에 적용합니다. 셸에서 $ENV_GROUP 환경 변수를 설정한 경우 이를 다음 명령어에 사용할 수 있습니다.helm upgrade $ENV_GROUP apigee-virtualhost/ \ --namespace APIGEE_NAMESPACE \ --atomic \ --set envgroup=$ENV_GROUP \ -f OVERRIDES_FILE.yaml
사용 참고사항
- 클러스터에 조직이 2개 이상 포함되면 어떻게 되나요?
인그레스가 지정된 포트(443)에 대해 클러스터 수준에 있고, ApigeeRoute CRD에 대해 하나의 키/인증서 쌍만 가능하므로, 모든 조직이 동일한 키/인증서 쌍을 공유해야 합니다.
- 클러스터에 환경 그룹이 2개 이상 포함되면 어떻게 되나요? 가상 호스트가 동일한 키/인증서 쌍을 공유할 경우 작동하나요?
모든 환경 그룹 간의 모든 호스트 이름이 동일한 키/인증서 쌍을 사용해야 합니다.
- 게이트웨이 대신 ApigeeRoute를 만드는 이유가 무엇인가요?
ApigeeRoutes는 Apigee로 검증할 수 있지만 게이트웨이(Istio CRD)는 그렇지 않습니다. 기술적으로 게이트웨이도 작동 가능하지만, 잠재적인 구성 실수를 방지할 수 있습니다(검증 웹훅 사용).
- Apigee용으로 SNI 이외의 클라이언트를 구성하려면 어떻게 해야 하나요?
Apigee 인스턴스가 Google 부하 분산기를 통해 노출되면 부하 분산기는 부하 분산 문서의 설명대로 SNI 이외의 클라이언트를 지원합니다. 그렇지 않고 내부 PSC 엔드포인트나 VPC를 통해 Apigee 인스턴스를 노출한 경우 기본적으로 Apigee 인스턴스는 SNI 이외의 클라이언트를 지원합니다.