이 페이지에서는 Google Kubernetes Engine, Kubernetes 또는 Compute Engine으로 Extensible Service Proxy V2(ESPv2)를 배포할 때 보안 소켓 레이어(SSL) 포트를 사용 설정하는 방법을 설명합니다. 일부 사용 사례의 경우 배포된 Endpoints 서비스에 SSL 포트를 사용 설정해야 할 수도 있습니다.
시작하기 전에 선택한 서비스 유형 및 환경에 대한 가이드를 이미 검토하고 SSL 없이 ESPv2를 배포하는 방법을 알아보세요.
SSL 키 및 인증서 구성
HTTPS 요청을 처리하도록 SSL 포트를 구성하려면 다음 단계를 따르세요.
SSL 키 파일 이름이
server.key
이고 인증서 파일 이름이server.crt
인지 확인합니다. 테스트를 위해 다음 명령어로 OpenSSL을 사용하여 자체 서명된server.key
와server.crt
를 생성할 수 있습니다.openssl req -x509 -nodes -days 365 -newkey rsa:2048 \ -keyout ./server.key -out ./server.crt
서버 인증서에
CN
및subjectAltName
을 모두 지정하세요. 이러한 속성 값은 클라이언트가 서비스를 호출하는 데 사용하는 DNS 또는 IP와 일치해야 합니다. 그렇지 않으면 SSL 핸드셰이크가 실패합니다.
Kubernetes에서 ESPv2에 SSL 사용 설정
Kubernetes에서 ESPv2에 SSL 포트를 사용 설정하려면 다음 안내를 따르세요.
SSL 키와 인증서로 Kubernetes 보안 비밀을 만듭니다.
kubectl create secret generic esp-ssl \ --from-file=./server.crt --from-file=./server.key
Kubernetes 구성 파일(예:
echo-ssl.yaml
)을 다음 스니펫에 표시된 대로 수정합니다.참고: 이 구성 샘플은 수정이 필요한 행을 표시합니다. 파일을 Cloud Endpoints에 배포하려면 전체 구성 파일이 필요합니다.
Kubernetes 볼륨 페이지의 지침에 따라 볼륨으로 만든 Kubernetes 보안 비밀을 마운트합니다.
ESPv2의 시작 옵션 지정에 설명된 대로 ESPv2를 시작하되, 시작 플래그
--ssl_server_cert_path
를 추가하여 마운트된 인증서 파일의 경로를 지정합니다.kubectl
을 사용하여 업데이트된 Kubernetes 구성 파일로 서비스를 시작합니다.kubectl apply -f echo-ssl.yaml
다음 OpenSSL 명령어를 사용하여 클라이언트의 루트 인증서를 생성합니다.
openssl x509 -in ./server.crt -out ./client.pem -outform PEM
클라이언트가
curl
를 사용 중인 경우--caroot
플래그에서client.pem
파일을 사용할 수 있습니다. gRPC의 경우client.pem
은 gRPC 채널에 대한 SSL 인증서의 루트 인증서 파일로 사용됩니다.
SSL 인증서 업데이트
SSL 인증서를 정기적으로 업데이트하는 것이 중요합니다. SSL 인증서를 업데이트하려면 다음 단계를 수행해야 합니다.
- 위의 1단계에 설명된 대로 새 인증서를 만듭니다.
- 위의 3단계에 설명된 대로 새 인증서를 Kubernetes 보안 비밀에 마운트합니다.
- 위의 5단계에 설명된 대로 ESPv2 Kubernetes 배포를 업데이트합니다.
- 위의 6단계에 설명된 대로 클라이언트 루트 인증서 파일을 다시 생성합니다.
Compute Engine에서 ESPv2에 SSL 사용 설정
Compute Engine에서 SSL을 사용 설정하려면 먼저 다음 단계에 따라 Compute Engine 인스턴스의 /etc/nginx/ssl
폴더에 server.key
및 server.crt
파일을 복사합니다.
다음 명령어를 실행하고 INSTANCE_NAME을 Compute Engine 인스턴스의 이름으로 바꿉니다.
gcloud compute scp server.* INSTANCE-NAME
ssh
를 사용하여 인스턴스에 연결합니다.gcloud compute ssh INSTANCE-NAME
인스턴스 VM 박스에 디렉터리를 만들고 파일을 복사합니다.
sudo mkdir -p /etc/esp/ssl
sudo cp server.* /etc/esp/ssl/
Docker를 사용하여 배포하려면 해당 서비스 유형에 대한 안내를 따르세요. ESPv2 Docker 컨테이너를 실행할 때는 다음 명령어를 사용하세요.
sudo docker run --name=esp \ --detach \ --publish=443:9000 \ --net=esp_net \ --volume=/etc/esp/ssl:/etc/esp/ssl \ gcr.io/endpoints-release/endpoints-runtime:2 \ --service=SERVICE_NAME \ --rollout_strategy=managed \ --backend=echo:8080 \ --ssl_server_cert_path=/etc/esp/ssl \ --listener_port=9000
SSL이 아닌
docker run
명령어와 비교할 때 명령어의 SSL 버전은 다른 구성을 만듭니다. 예를 들어 SSL 명령어는 다음을 수행합니다.--volume
을 사용하여 키와 CRT 파일이 있는 폴더를 컨테이너에 마운트합니다.--ssl_server_cert_path=/etc/esp/ssl
을 사용하여 ESPv2에/etc/esp/ssl
폴더에서 서버 인증서 파일server.key
및server.crt
를 찾도록 알려줍니다.포트 매핑 플래그
--publish
를 변경합니다. HTTPS 포트 443에 대해 들어오는 요청이 ESPv2 포트 9000에 매핑됩니다.
SSL 인증서 업데이트
SSL 인증서를 정기적으로 업데이트하는 것이 중요합니다. SSL 인증서를 업데이트하려면 다음 단계를 수행해야 합니다.
- 위의 1단계에 설명된 대로 새 인증서를 만들어 VM 인스턴스에 복사합니다.
- 위의 3단계에 설명된 대로 새 인증서를
/etc/esp/ssl
디렉터리에 복사합니다. - 위의 4단계에 설명된 대로
sudo docker run
명령어를 사용하여 ESPv2 컨테이너를 중지하고 다시 시작합니다.
SSL 포트 테스트
SSL 포트를 더 쉽게 테스트할 수 있도록 다음 환경 변수를 설정합니다.
IP_ADDRESS를 새 SSL 인증서가 있는 Compute Engine 인스턴스의 IP 주소로 설정합니다.
ENDPOINTS_KEY를 유효한 API 키로 설정합니다.
SSL 포트가 사용 설정되면 HTTPS를 사용하여 확장 가능 서비스 프록시에 요청을 보낼 수 있습니다. 인증서가 자체 서명된 경우 -k
를 사용하여 curl
에서 비보안 옵션을 사용 설정합니다.
curl -k -d '{"message":"hello world"}' -H "content-type:application/json" \ https://IP_ADDRESS:443/echo?key=ENDPOINTS_KEY
또는 아래와 같이 pem
형식의 인증서를 생성하고 --cacert
옵션을 사용하여 아래와 같이 curl
에서 자체 서명된 인증서를 사용합니다.
openssl x509 -in server.crt -out client.pem -outform PEM
curl --cacert "./client.pem" -d '{"message":"hello world"}' -H "content-type:application/json" \ https://IP_ADDRESS:443/echo?key=ENDPOINTS_KEY