<ph type="x-smartling-placeholder"></ph>
현재 Apigee Edge 문서를 보고 있습니다.
Apigee X 문서. 정보
이 주제에서는 Docker 컨테이너에서 Edge Microgateway를 실행하는 방법을 설명합니다. 단계 이 주제에서 다루는 내용은 Docker, Docker 명령어, Edge Microgateway에 대한 기본적인 이해를 전제로 합니다. 살펴보겠습니다 대상 자세한 내용은 Docker 관련 문서를 참조하세요. 및 Edge Microgateway와 함께 사용할 수 있습니다.
기본 요건
Docker 컨테이너에서 Edge Microgateway를 실행하기 전에 다음을 수행해야 합니다. 작업:
Apigee 조직/환경에 Edge Microgateway를 구성합니다.
edgemicro configure -o your_org -e your_env -u your_username
구성에 대한 자세한 내용은 1부: Edge Microgateway 구성을 참조하세요.
구성 단계를 수행한 후 구성을 찾습니다. 파일에서 참조됩니다. 기본 위치는 다음과 같습니다.
$HOME/.edgemicro/your_org-your_env-config.yaml
여기서
your_org
및your_env
는 조직입니다.edgemicro config
명령어를 실행할 때 사용한 환경입니다. 필요한 사항 이 파일을 만듭니다.edgemicro config
명령어. 예를 들면 다음과 같습니다.The following credentials are required to start edge micro key: d9c34e1aff68ed969273c016699eabf48780e4f652242e72fc88a43e21252cb0 secret: 3bc95a71c86a3c8ce04537fbcb788158731t51dfc6cdec13b7c05aa0bd969430
Docker 컨테이너에서 Edge Microgateway를 시작하려면 먼저 필요한 Apigee Edge 항목을 만들거나 이미 만든 적이 있는 경우 인증된 API 프록시를 호출할 수 있습니다 이러한 항목에는 Edge Microgateway 인식 기능이 포함됩니다. API 제품, 개발자, 개발자 앱으로 구성됩니다. 자세한 안내는 다음을 참조하세요. Apigee Edge에서 항목 만들기
Edge Micro를 Docker 컨테이너로 실행
Edge Microgateway용 Docker 이미지를 다운로드합니다.
드림docker pull gcr.io/apigee-microgateway/edgemicro:latest
다음 단계로 진행하기 전에 기본 요건 섹션을 참조하세요.
다음 명령어를 실행하여 Edge Microgateway 구성 파일을 base64로 인코딩합니다. 위치:
$HOME/.edgemicro
export EDGEMICRO_CONFIG=`base64 $HOME/.edgemicro/your_org-your_env-config.yaml`
여기서
your_org
및your_env
은(는) 다음에 해당할 때 사용한 조직 및 환경입니다.edgemicro config
명령어를 실행했습니다명령어 주위에 백틱 (`)을 배치해야 합니다. 예를 들면 다음과 같습니다.
드림export EDGEMICRO_CONFIG=`base64 $HOME/.edgemicro/docs-test-config.yaml`
Edge Microgateway를 컨테이너로 실행합니다. 이 명령어는 여러 환경 변수를 설정합니다. Edge Microgateway를 시작하는 데 사용되는 컨테이너 런타임입니다.
docker run -P -p 8000:8000 -d --name edgemicro \ -v /var/tmp:/opt/apigee/logs \ -e EDGEMICRO_PROCESSES=1 \ -e EDGEMICRO_ORG=your_org \ -e EDGEMICRO_ENV=your_env \ -e EDGEMICRO_KEY=your_key \ -e EDGEMICRO_SECRET=your_secret \ -e "EDGEMICRO_CONFIG=$EDGEMICRO_CONFIG" \ -e SERVICE_NAME=edgemicro \ --security-opt=no-new-privileges \ --cap-drop=ALL \ gcr.io/apigee-microgateway/edgemicro:latest
매개변수
매개변수 설명 -P
노출된 모든 포트를 호스트에 게시합니다. Docker 실행 참조도 확인하세요. -p
단일 포트 또는 포트 범위를 명시적으로 매핑합니다. Docker 실행 참조도 확인하세요. -d
분리 모드에서 실행합니다. Docker 실행 참조도 확인하세요. -v, --volume
볼륨 마운트를 지정합니다. Edge Microgateway를 구성하는 경우 Docker 컨테이너에서 TLS를 사용하려면 마운트해야 합니다 VOLUME[공유 파일 시스템]도 참고하세요. Docker 컨테이너에서 TLS 사용도 참조하세요. EDGEMICRO_ORG
Edge Microgateway를 구성하는 데 사용한 Apigee 조직의 이름입니다. EDGEMICRO_ENV
Edge Microgateway를 구성하는 데 사용한 Apigee 환경의 이름입니다. EDGEMICRO_PROCESSES
시작할 프로세스 수입니다. EDGEMICRO_KEY
Edge Microgateway를 구성할 때 반환된 키입니다. EDGEMICRO_SECRET
Edge Microgateway를 구성할 때 반환된 보안 비밀입니다. EDGEMICRO_CONFIG
base64로 인코딩된 Edge Microgateway 구성 파일이 포함된 변수입니다. SERVICE_NAME
Kubernetes를 사용하는 경우 이 매개변수가 자동으로 채워집니다. 그렇지 않으면 원하는 대로 설정할 수 있습니다. 아무것도 지정하지 않으면 이름이 default
로 설정되어 있는지 확인합니다.DEBUG
디버깅을 사용 설정하려면 *
로 설정합니다.HTTP_PROXY
HTTPS_PROXY
Edge Microgateway가 다음에 해당하는 경우 사용 방화벽 뒤에서 실행되고 게이트웨이가 Apigee와 통신할 수 없음 Edge. 자세한 내용은 자세한 내용은 회사 방화벽 뒤에서 Edge Microgateway 설정을 참조하세요. 예:
HTTP_PROXY=http://10.203.0.1:5187/
NO_PROXY
Edge Microgateway가 프록시하면 안 되는 쉼표로 구분된 도메인 목록입니다. 자세한 내용은 회사 방화벽 뒤에서 Edge Microgateway 설정을 참조하세요. 예:
localhost,127.0.0.1,localaddress,.localdomain.com
NODE_EXTRA_CA_CERTS
(선택사항) 신뢰할 수 없는 CA를 사용하는 경우 이 매개변수를 사용합니다. 기본적으로 Node.js로 빌드됩니다 이 매개변수의 값을 하나 이상의 신뢰할 수 있는 인증서가 PEM 형식으로 포함된 파일을 업로드합니다. 대상 자세한 내용은 TLS 인증서를 참고하세요. --security-opt
(선택사항) 원하는 Docker 보안 옵션을 설정합니다. Docker 문서의 보안 구성을 참조하세요. --cap-drop
(선택사항) 컨테이너에서 허용되는 Linux 기능에 대한 한도를 설정합니다. Docker 문서에서 런타임 권한 및 Linux 기능을 참고하세요. 예를 들면 다음과 같습니다.
docker run -P -p 8000:8000 -d --name edgemicro \ -v /var/tmp:/opt/apigee/logs \ -e EDGEMICRO_PROCESS=1 \ -e EDGEMICRO_ORG=docs \ -e EDGEMICRO_ENV=test \ -e EDGEMICRO_KEY=d9c34e1aff68ed969273b016699eabf48780e4f652242e72fc88a23e21252cb0 \ -e EDGEMICRO_SECRET=3bc95a71c86a3c8ce04137fbcb788158731t51dfc6cdec13b7c05aa0bd969430 \ -e "EDGEMICRO_CONFIG=$EDGEMICRO_CONFIG" \ -e SERVICE_NAME=edgemicro \ --security-opt=no-new-privileges \ --cap-drop=ALL \ gcr.io/apigee-microgateway/edgemicro
컨테이너가 실행 중인지 확인하려면 다음 안내를 따르세요.
docker ps
다음과 비슷한 출력이 표시됩니다.
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 8b92e082ea9c edgemicro "/tmp/entrypoint.sh" 12 minutes ago Up 12 minutes 0.0.0.0:8000->8000/tcp, 0.0.0.0:32775->8443/tcp edgemicro
API 호출 테스트
컨테이너에서 Edge Microgateway를 시작한 후 API 호출을 수행할 수 있습니다.
예를 들어 API의 기본 경로가 /hello
인 경우:
http://localhost:8000/hello
샘플 출력:
{"error":"missing_authorization","error_description":"Missing Authorization header"}
이 응답이 표시되면 Edge Microgateway가 성공적으로 처리되었음을 의미합니다. 합니다. 하지만 기본적으로 Edge Microgateway에는 인증을 위해 API 키가 필요합니다. 다음 섹션에서는 유효한 API 키로 API를 테스트합니다.
유효한 API 키로 API 테스트
Edge UI에서 이전에 만든 개발자 앱으로 이동합니다. 개발자 앱 페이지에서 고객 키를 표시하고 복사합니다. 이 값이 API 키입니다. 이 실습에서 이 키를 사용하여 인증된 API 호출을 실행합니다.
다음과 같이 x-api-key
헤더를 사용하여 API를 호출합니다. 광고주가 지정한 고객 키 값으로
API 키입니다. 기본적으로 Edge Microgateway는
다음과 같이 x-api-key
라는 헤더에 키를 전달해야 합니다.
curl -i http://localhost:8000/hello -H "x-api-key:apikey"
예를 들면 다음과 같습니다.
curl -i http://localhost:8000/hello -H "x-api-key:PydUKRDGIXRqF2xh4usn1FLHbhGKVIz"
Edge Microgateway를 통해 인증된 API 호출 수행에 대해 자세히 알아보기 4부: Secure Edge Microgateway를 참조하세요.
Edge Microgateway 중지
다음 Docker 명령어를 사용하여 Edge Microgateway를 중지합니다.
docker stop edgemicro
Edge Microgateway 다시 시작
Edge Microgateway를 중지한 후 다음 Docker 명령어를 사용하여 다시 시작할 수 있습니다.
docker start edgemicro
Docker 컨테이너에서 TLS 사용
이 섹션에서는 실행 중인 Edge Microgateway에 TLS를 구성하는 방법을 설명합니다. Docker 컨테이너에서 실행됩니다 TLS를 사용하도록 Edge Microgateway 서버를 구성할 수 있습니다. (북쪽 방향) 에지를 구성할 수 있으며 대상 엔드포인트로 나가는 요청을 위한 TLS 클라이언트가 되는 Microgateway (남쪽 방향)입니다.
인증서 파일을 넣을 위치
Edge Microgateway를 실행하는 Docker 컨테이너에는 /opt/apigee/.edgemicro
에 마운트 지점이 있습니다.
TLS 인증서를 사용하도록 Edge Microgateway를 구성할 때
인증서 파일을 다운로드하고 마운트 지점에서
Edge Microgateway 구성 파일 이 구성 파일은 일반적으로 $HOME/.edgemicro
에 있습니다.
디렉터리이며 이름은 your_org-your_env-config.yaml
입니다.
예를 들면 다음과 같습니다.
...
edgemicro:
ssl:
key: /opt/apigee/.edgemicro/southbound/tls.key
cert: /opt/apigee/.edgemicro/southbound/tls.crt
...
Node.js에서 신뢰하지 않는 CA 사용
기본적으로 신뢰할 수 없는 인증 기관 (CA)을 사용하는 경우
Node.js (예: 자체 서명 인증서의 경우)를 사용하려면
NODE_EXTRA_CA_CERTS
매개변수를 설정합니다.
이 매개변수를 하나 이상의 2012년 3월 7일 자로 인증할 수 있습니다 이 매개변수가 사용되는 방식을 확인하려면 예: 노스바운드 TLS 구성 방법 및 남쪽 바인딩 TLS 구성 방법
예를 들면 다음과 같습니다.
docker run -P -p 8443:8443 -d --name edgemicro \
-v $HOME/.edgemicro:/opt/apigee/.edgemicro \
-v $HOME/.edgemicro:/opt/apigee/logs \
-e NODE_EXTRA_CA_CERTS=/opt/apigee/.edgemicro/rootca.pem \
-e EDGEMICRO_PORT=8443 \
-e EDGEMICRO_ORG=docs \
-e EDGEMICRO_ENV=test \
-e EDGEMICRO_KEY=ac36574905fb54fdae65fc5433e831bec2680efb98220a355f2e917e52973c \
-e EDGEMICRO_SECRET=aac81dff6c326eaa222d53c15c8841fa78ea863bf4472568c9ce2d80a3bc56 \
-e "EDGEMICRO_CONFIG=$EDGEMICRO_CONFIG" \
--link helloworld:helloworld gcr.io/apigee-microgateway/edgemicro
Edge Micro를 Docker 컨테이너로 실행도 참조하세요.
TLS 유효성 검사 사용 중지
권장되지는 않지만 TLS 유효성 검사를 사용 중지하는 것이 좋습니다. Edge Microgateway를 포함합니다. TLS를 사용 중지하는 기능 기본적으로 Edge Microgateway Docker 컨테이너에 빌드되지 않습니다. 완수할 일 Edge Microgateway용으로 맞춤설정된 Docker 이미지를 만들어야 합니다. 미만 다음은 커스텀 이미지를 빌드하고 TLS 유효성 검사를 사용 중지하는 일반적인 안내입니다.
다음에서 Edge Microgateway 소스 저장소를 클론하거나 다운로드합니다.
https://github.com/apigee-internal/microgateway
cd
을 소스 코드 디렉터리의microgateway/kubernetes/docker/edgemicro
디렉터리로 이동합니다.예를 들면 다음과 같습니다.
cd $HOME/git/microgateway/kubernetes/docker/edgemicro
entrypoint.sh
파일을 열고NODE_TLS_REJECT_UNAUTHORIZED
를 허용하도록 코드를 수정합니다. 환경 변수입니다 나중에 컨테이너를 실행할 때 변수의 값을 지정합니다.Docker 컨테이너를 빌드합니다.
docker build -t edgemicro .
컨테이너를 실행할 때
-e NODE_TLS_REJECT_UNAUTHORIZED = 1
옵션을 지정합니다. 예를 들면 다음과 같습니다.
docker run -P -p 8443:8443 -d --name edgemicro \
-v $HOME/.edgemicro:/opt/apigee/.edgemicro \
-v $HOME/.edgemicro:/opt/apigee/logs \
-e NODE_TLS_REJECT_UNAUTHORIZED = 1 \
-e EDGEMICRO_PORT=8443 \
-e EDGEMICRO_ORG=docs \
-e EDGEMICRO_ENV=test \
-e EDGEMICRO_KEY=ac36574905fb54fdae65fc5433e831bec2680efb98220a355f2e917e52973c \
-e EDGEMICRO_SECRET=aac81dff6c326eaa222d53c15c8841fa78ea863bf4472568c9ce2d80a3bc56 \
-e "EDGEMICRO_CONFIG=$EDGEMICRO_CONFIG" \
--link helloworld:helloworld gcr.io/apigee-microgateway/edgemicro
예: Northbound TLS를 구성하는 방법
이 섹션에서는 Edge Microgateway에서 노스바운드 (수신) TLS 연결을 설정하는 방법을 설명합니다. 있습니다. Northbound TLS를 사용하면 클라이언트가 Edge Microgateway에 API를 호출할 때 HTTPS를 사용할 수 있습니다. 아래 예에서는 자체 서명된 인증서를 사용합니다.
1. 초기 설정 단계
- 시스템에서
openssl.cnf
파일을 찾습니다. 예를 들면/etc/ssl/openssl.cnf
입니다. - 수정할
opensssl.cnf
파일을 엽니다. 구성 파일에
req_extensions
가 있는지 확인합니다. 예를 들어 파일에 다음과 유사한 정보가 있어야 합니다.[ req ] ... req_extensions = v3_req ... [ v3_req ] extendedKeyUsage = serverAuth, clientAuth, codeSigning, emailProtection basicConstraints = CA:FALSE keyUsage = nonRepudiation, digitalSignature, keyEncipherment
openssl.cnf
에 다음 스탠자를 추가하여 올바른 SNI 속성을 생성합니다.[ alt_names ] DNS.1 = www.example.com DNS.2 = example.com DNS.3 = localhost DNS.4 = localhost.localdomain DNS.5 = 127.0.0.1 DNS.6 = ::1 DNS.7 = fe80::1
opensssl.cnf
파일 예시:[ req ] distinguished_name = req_distinguished_name attributes = req_attributes req_extensions = v3_req [ v3_req ] extendedKeyUsage = serverAuth, clientAuth, codeSigning, emailProtection basicConstraints = CA:FALSE keyUsage = nonRepudiation, digitalSignature, keyEncipherment [ req_distinguished_name ] countryName = Country Name (2 letter code) countryName_min = 2 countryName_max = 2 stateOrProvinceName = State or Province Name (full name) localityName = Locality Name (eg, city) 0.organizationName = Organization Name (eg, company) organizationalUnitName = Organizational Unit Name (eg, section) commonName = Common Name (eg, fully qualified host name) commonName_max = 64 emailAddress = Email Address emailAddress_max = 64 [ req_attributes ] challengePassword = A challenge password challengePassword_min = 4 challengePassword_max = 20 [ alt_names ] DNS.1 = www.example.com DNS.2 = example.com DNS.3 = localhost DNS.4 = localhost.localdomain DNS.5 = 127.0.0.1 DNS.6 = ::1 DNS.7 = fe80::1
기본 요건 섹션에 제공된 단계에 따라 Edge Microgateway를 구성합니다(아직 구성하지 않은 경우). 완료하면 Edge Microgateway 인식 프록시, API 제품, 개발자 개발자 앱이 있습니다. 또한
edgemicro configure
명령어를 실행해야 합니다. 키와 비밀번호를 수신했습니다
2. 자체 서명 인증서 생성
다음으로 TLS를 설정하는 데 필요한 인증서와 키를 생성합니다.
$HOME/.edgemicro
디렉터리로cd
다음 bash 스크립트를 만듭니다. 원하는 이름을 지정할 수 있습니다. 예를 들면
keygen.sh
입니다.#!/bin/bash # generate ca openssl genrsa -out rootca.key 2048 openssl req -x509 -new -nodes -key rootca.key -sha256 -days 1024 -out rootca.pem # generate key openssl genrsa -out tls.key 2048 openssl req -new -key tls.key -out tls.csr # sign cert openssl x509 -req -in tls.csr -CA rootca.pem -CAkey rootca.key -CAcreateserial -out tls.crt -days 1024 -sha256 -extensions 'v3_req' -extfile path/openssl.cnf
bash 파일에서
openssl.cnf
파일의 경로가 올바른지 확인합니다.bash 파일을 실행합니다. 인증서 정보를 입력하라는 메시지가 표시됩니다. 반드시 일반 이름:
localhost
다음 파일이 생성되었는지 확인합니다.
rootca.key
rootca.pem
tls.key
tls.csr
rootca.srl
tls.crt
3. Edge Microgateway 구성 파일 수정
편집기에서 Edge Micro 구성 파일을 엽니다. 예를 들면 다음과 같습니다.
vi $HOME/.edgemicro/myorg-test-config.yaml
다음과 같이
edgemicro
스탠자를 수정합니다. 참고:port
및ssl
속성으로 이전합니다.edge_config: ... edgemicro: port: 8443 max_connections: 1000 config_change_poll_interval: 600 ssl: key: /opt/apigee/.edgemicro/tls.key cert: /opt/apigee/.edgemicro/tls.crt passphrase: admin123 rejectUnauthorized: true requestCert: false logging: ...
다음 명령어를 실행하여 Edge Microgateway 구성 파일을 base64로 인코딩합니다. 위치:
$HOME/.edgemicro
export EDGEMICRO_CONFIG=`base64 $HOME/.edgemicro/your_org-your_env-config.yaml`
여기서
your_org
및your_env
은(는) 다음에 해당할 때 사용한 조직 및 환경입니다.edgemicro config
명령어를 실행했습니다명령어 주위에 백틱 (`)을 배치해야 합니다. 예를 들면 다음과 같습니다.
export EDGEMICRO_CONFIG=`base64 $HOME/.edgemicro/docs-test-config.yaml`
Edge Micro를 Docker 컨테이너로 실행도 참조하세요.
4. 컨테이너 실행
다음 명령어를 실행하여 Edge Microgateway로 Docker 컨테이너를 실행합니다.
docker run -P -p 8443:8443 -d --name edgemicro \ -v path_to_your_edgemicro_dir:/opt/apigee/.edgemicro \ -v path_to_your_logs_dir:/opt/apigee/logs \ -e NODE_EXTRA_CA_CERTS=/opt/apigee/.edgemicro/rootca.pem \ -e EDGEMICRO_PORT=8443 \ -e EDGEMICRO_ORG=$EDGEMICRO_ORG \ -e EDGEMICRO_ENV=$EDGEMICRO_ENV \ -e EDGEMICRO_KEY=$EDGEMICRO_KEY \ -e EDGEMICRO_SECRET=$EDGEMICRO_SECRET \ -e "EDGEMICRO_CONFIG=$EDGEMICRO_CONFIG" \ gcr.io/apigee-microgateway/edgemicro:latest
명령어에 사용된 다음 매개변수를 참고하세요. 기본 스토리지와 Edge Micro를 Docker 컨테이너로 실행에 설명된 명령어를 사용합니다.
port
는8443
으로 설정됩니다.- 볼륨 마운트는 키와 인증서 파일을 마운트하는 데 사용됩니다.
NODE_EXTRA_CA_CERTS
변수는 맞춤 CA를 추가하는 데 사용됩니다 (필요한 경우 가 포함됩니다.
5. TLS 구성 테스트
다음 cURL 명령어를 실행하여 설정을 테스트합니다. 대체 기본 경로와 API 키를 명령어에 넣으세요. 다음 예에서는 현재 디렉터리에 있다고 가정합니다.
rootca.pem
이 있고 생성한 프록시의 기본 경로/hello
이 있는지 확인합니다.curl -v https://localhost:8443/hello --cacert rootca.pem \ -H "x-api-key: Az82fdnfONVCOOE4NKhajxAboDgA3FAo"
상세 cURL 출력은 TLS 핸드셰이크. HTTP 200 응답이 표시되면 구성이 성공한 것입니다.
* Trying ::1...ey:Az82fdnfONVCOOE4NKhajxAboDgA3FAo" * TCP_NODELAY set * Connected to localhost (::1) port 8443 (#0) * ALPN, offering h2 * ALPN, offering http/1.1 * Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH * successfully set certificate verify locations: * CAfile: rootca.pem CApath: none * TLSv1.2 (OUT), TLS handshake, Client hello (1): * TLSv1.2 (IN), TLS handshake, Server hello (2): * TLSv1.2 (IN), TLS handshake, Certificate (11): * TLSv1.2 (IN), TLS handshake, Server key exchange (12): * TLSv1.2 (IN), TLS handshake, Server finished (14): * TLSv1.2 (OUT), TLS handshake, Client key exchange (16): * TLSv1.2 (OUT), TLS change cipher, Client hello (1): * TLSv1.2 (OUT), TLS handshake, Finished (20): * TLSv1.2 (IN), TLS change cipher, Client hello (1): * TLSv1.2 (IN), TLS handshake, Finished (20): * SSL connection using TLSv1.2 / ECDHE-RSA-AES128-GCM-SHA256 * ALPN, server accepted to use http/1.1 * Server certificate: * subject: C=US; ST=CO; L=Boulder; O=Docs; OU=Docs; CN=localhost; emailAddress=docs@apigee.com * start date: Dec 14 22:35:28 2018 GMT * expire date: Oct 3 22:35:28 2021 GMT * common name: localhost (matched) * issuer: C=US; ST=CO; L=Boulder; O=Docs; OU=Docs; CN=localhost; emailAddress=docs@apigee.com * SSL certificate verify ok. > GET /hello HTTP/1.1 > Host: localhost:8443 > User-Agent: curl/7.54.0 > Accept: */* > x-api-key:Az82fdnfaONVCOE4NKhajxAboDA3FAo > < HTTP/1.1 200 OK < x-powered-by: Apigee < access-control-allow-origin: * < x-frame-options: ALLOW-FROM RESOURCE-URL < x-xss-protection: 1 < x-content-type-options: nosniff < content-type: text/plain; charset=utf-8 < etag: W/"d-GHB1ZrJKk/wdVTdB/jgBsw" < date: Fri, 14 Dec 2018 22:43:13 GMT < via: 1.1 google < alt-svc: clear < x-response-time: 1325 < Connection: keep-alive < Transfer-Encoding: chunked < * Connection #0 to host localhost left intact Hello, Guest!
예: 남쪽 바인딩 TLS 구성 방법
이 섹션에서는 Edge Microgateway 서버 및 백엔드 대상 애플리케이션을 지원합니다. 아래 예에서는 자체 서명 인증서를 사용합니다
1. 초기 설정 단계
- 시스템에서
openssl.cnf
파일을 찾습니다. 예를 들면/etc/ssl/openssl.cnf
입니다. - 수정할
opensssl.cnf
파일을 엽니다. 구성 파일에
req_extensions
가 있는지 확인합니다. 예를 들어 파일에 다음과 유사한 정보가 있어야 합니다.[ req ] ... req_extensions = v3_req ... [ v3_req ] extendedKeyUsage = serverAuth, clientAuth, codeSigning, emailProtection basicConstraints = CA:FALSE keyUsage = nonRepudiation, digitalSignature, keyEncipherment
openssl.cnf
에 다음 스탠자를 추가하여 올바른 SNI 속성을 생성합니다.[ alt_names ] DNS.1 = helloworld DNS.2 = localhost DNS.3 = localhost.localdomain DNS.4 = 127.0.0.1 DNS.5 = ::1 DNS.6 = fe80::1
opensssl.cnf
파일 예시:[ req ] distinguished_name = req_distinguished_name attributes = req_attributes req_extensions = v3_req [ v3_req ] extendedKeyUsage = serverAuth, clientAuth, codeSigning, emailProtection basicConstraints = CA:FALSE keyUsage = nonRepudiation, digitalSignature, keyEncipherment [ req_distinguished_name ] countryName = Country Name (2 letter code) countryName_min = 2 countryName_max = 2 stateOrProvinceName = State or Province Name (full name) localityName = Locality Name (eg, city) 0.organizationName = Organization Name (eg, company) organizationalUnitName = Organizational Unit Name (eg, section) commonName = Common Name (eg, fully qualified host name) commonName_max = 64 emailAddress = Email Address emailAddress_max = 64 [ req_attributes ] challengePassword = A challenge password challengePassword_min = 4 challengePassword_max = 20 [ alt_names ] DNS.1 = helloworld DNS.2 = localhost DNS.3 = localhost.localdomain DNS.4 = 127.0.0.1 DNS.5 = ::1 DNS.6 = fe80::1
edgemicro configure
명령어를 실행합니다.edgemicro configure -o your_org -e your_env -u your_username
구성에 대한 자세한 내용은 1부: Edge Microgateway 구성을 참조하세요.
다음에서 반환된 키 및 보안 비밀 사용자 인증 정보를 복사합니다.
edgemicro configure
컨테이너를 실행하려면 이 값이 필요합니다. 예를 들면 다음과 같습니다.The following credentials are required to start edge micro key: d9c34e1aff68ed969273c016699eabf48780e4f652242e72fc88a43e21252cb0 secret: 3bc95a71c86a3c8ce04537fbcb788158731t51dfc6cdec13b7c05aa0bd969430
2. Node.js 대상 애플리케이션 만들기
.edgemicro
디렉터리로cd
다음 bash 스크립트를 만듭니다. 원하는 이름을 지정할 수 있습니다. 예를 들면
keygen.sh
입니다.#!/bin/bash # generate ca openssl genrsa -out rootca.key 2048 openssl req -x509 -new -nodes -key rootca.key -sha256 -days 1024 -out rootca.pem # generate key openssl genrsa -out tls.key 2048 openssl req -new -key tls.key -out tls.csr # sign cert openssl x509 -req -in tls.csr -CA rootca.pem -CAkey rootca.key -CAcreateserial -out tls.crt -days 1024 -sha256 -extensions 'v3_req' -extfile path/openssl.cnf
bash 파일에서
openssl.cnf
파일의 경로가 올바른지 확인합니다.bash 파일을 실행합니다. 인증서 정보를 입력하라는 메시지가 표시됩니다. 반드시 일반 이름:
hellworld
다음 파일이 생성되었는지 확인합니다.
rootca.key
rootca.pem
tls.key
tls.csr
rootca.srl
tls.crt
server.js
라는 새 파일을 만듭니다.'use strict'; const express = require('express'); const https = require('https'); const fs = require('fs'); const options = { key: fs.readFileSync("tls.key"), cert: fs.readFileSync("tls.crt") }; // Constants const PORT = 9443; const HOST = '0.0.0.0'; // App const app = express(); app.get('/', (req, res) => { res.send('Hello world\n'); }); https.createServer(options, app).listen(PORT);
server.js
와 동일한 디렉터리에package.json
파일을 만듭니다. 예를 들면 다음과 같습니다.{ "name": "helloworld", "version": "1.0.0", "description": "", "main": "server.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1", "start": "node server.js" }, "author": "", "license": "ISC", "dependencies": { "express": "^4.16.4", "fs": "0.0.1-security", "https": "^1.0.0" } }
npm install
를 실행하여 종속 항목을 가져옵니다.server.js
과 동일한 디렉터리에 새 Dockerfile을 만듭니다. 여기서WORKDIR
Node.js 앱의 루트 경로입니다.FROM node:8-alpine WORKDIR path-to-your-node-app COPY package*.json ./ RUN npm install COPY . . EXPOSE 9443 CMD [ "npm", "start" ]
Docker 이미지를 빌드합니다.
docker build -t helloworld .
샘플 앱을 시작합니다.
docker run -P -p 9443:9443 --name helloworld helloworld
3. Apigee Edge 항목 만들기
이러한 설정으로 Edge Microgateway 인식 프록시를 만듭니다. 자세한 내용은 Edge에서 Edge Microgateway 인식 API 프록시 만들기를 참조하세요.
- 프록시 이름:
edgemicro_local
- 버전:
1
- 기본 경로:
/local
- 목표:
https://helloworld:9443
- 프록시 이름:
API 제품을 만듭니다. 자세한 내용은 제품 만들기를 참고하세요.
개발자를 만듭니다. 자세한 내용은 개발자 만들기를 참고하세요.
개발자 앱을 만듭니다. 자세한 내용은 개발자 앱 만들기를 참고하세요.
4. 컨테이너 실행
편집기에서 Edge Micro 구성 파일을 엽니다. 예를 들면 다음과 같습니다.
vi $HOME/.edgemicro/myorg-test-config.yaml
다음과 같이
edgemicro
스탠자를 수정합니다. 참고:port
및ssl
속성으로 이전합니다.edge_config: ... edgemicro: port: 8443 max_connections: 1000 config_change_poll_interval: 600 ssl: key: /opt/apigee/.edgemicro/tls.key cert: /opt/apigee/.edgemicro/tls.crt passphrase: admin123 rejectUnauthorized: true requestCert: false logging: ...
다음 명령어를 실행하여
$HOME/.edgemicro
에 있는 Edge Microgateway 구성 파일을 base64로 인코딩합니다.export EDGEMICRO_CONFIG=`base64 $HOME/.edgemicro/your_org-your_env-config.yaml`
여기서
your_org
및your_env
은(는) 다음에 해당할 때 사용한 조직 및 환경입니다.edgemicro config
명령어를 실행했습니다명령어 주위에 백틱 (`)을 배치해야 합니다. 예를 들면 다음과 같습니다.
export EDGEMICRO_CONFIG=`base64 $HOME/.edgemicro/docs-test-config.yaml`
다음 명령어를 실행하여 Docker 컨테이너에서 Edge Microgateway를 시작합니다.
드림docker run -P -p 8443:8443 -d --name edgemicro \ -v path_to_your_edgemicro_dir:/opt/apigee/.edgemicro \ -v path_to_your_logs_dir:/opt/apigee/logs \ -e EDGEMICRO_PORT=8443 \ -e EDGEMICRO_ORG=$EDGEMICRO_ORG \ -e EDGEMICRO_ENV=$EDGEMICRO_ENV \ -e EDGEMICRO_KEY=$EDGEMICRO_KEY \ -e EDGEMICRO_SECRET=$EDGEMICRO_SECRET \ -e "EDGEMICRO_CONFIG=$EDGEMICRO_CONFIG" \ --link helloworld:helloworld gcr.io/apigee-microgateway/edgemicro
5. TLS 구성 테스트
다음 cURL 명령어를 실행하여 설정을 테스트합니다. 대체 마이크로 게이트웨이 인식 프록시에서 사용한 기본 경로와 Apigee Edge에서 만든 개발자 앱에서 가져온 API 키입니다. 예를 들면 다음과 같습니다.
curl https://localhost:8443/local -k -H "x-api-key: xxxx" -v
다음과 같은 오류가 표시됩니다.
... * subject: C=CA; ST=Ontario; L=Toronto; O=Google Canada; OU=Google Cloud Platform; CN=edgemicro; emailAddress=srinandans@google.com * start date: Dec 10 02:12:22 2018 GMT * expire date: Sep 29 02:12:22 2021 GMT * issuer: C=CA; ST=Ontario; L=Toronto; O=Google Canada; OU=Google Cloud Platform; CN=edgemicro; emailAddress=srinandans@google.com * SSL certificate verify result: unable to get local issuer certificate (20), continuing anyway. > GET /local HTTP/1.1 > Host: localhost:8443 > User-Agent: curl/7.54.0 > Accept: */* > x-api-key: 9fVC65pFj8LrmlPmVyxFjx4KgAHTxqSd > < HTTP/1.1 502 Bad Gateway < Date: Wed, 12 Dec 2018 05:25:01 GMT < Connection: keep-alive < Content-Length: 93 < * Connection #0 to host localhost left intact {"message":"unable to verify the first certificate","code":"UNABLE_TO_VERIFY_LEAF_SIGNATURE"}
Edge Microgateway를 다시 실행하되 이번에는
NODE_EXTRA_CA_CERTS
변수를 추가합니다.docker run -P -p 8443:8443 -d --name edgemicro \ -v path_to_your_edgemicro_dir:/opt/apigee/.edgemicro \ -v path_to_your_logs_dir:/opt/apigee/logs \ -e NODE_EXTRA_CA_CERTS=/opt/apigee/.edgemicro/rootca.pem \ -e EDGEMICRO_PORT=8443 \ -e EDGEMICRO_ORG=$EDGEMICRO_ORG \ -e EDGEMICRO_ENV=$EDGEMICRO_ENV \ -e EDGEMICRO_KEY=$EDGEMICRO_KEY \ -e EDGEMICRO_SECRET=$EDGEMICRO_SECRET \ -e "EDGEMICRO_CONFIG=$EDGEMICRO_CONFIG" \ --link helloworld:helloworld gcr.io/apigee-microgateway/edgemicro
다음 cURL 명령어를 실행합니다. 대체 기본 경로와 API 키를 생성할 수 있습니다 예를 들면 다음과 같습니다.
curl https://localhost:8443/local -k -H "x-api-key: xxxx" -v
출력을 확인합니다. 성공하면 HTTP 200 상태 응답을 받게 됩니다.
... > GET /local HTTP/1.1 > Host: localhost:8443 > User-Agent: curl/7.54.0 > Accept: */* > x-api-key: 9fVC65pFj8LrmlPmVyxFjx4KgAHTxqSd > < HTTP/1.1 200 OK < x-powered-by: Express < content-type: text/html; charset=utf-8 < etag: W/"c-M6tWOb/Y57lesdjQuHeB1P/qTV0" < date: Wed, 12 Dec 2018 05:49:28 GMT < x-response-time: 421 < Connection: keep-alive < Transfer-Encoding: chunked < Hello world
맞춤 플러그인 추가
커스텀 구성 파일을 작성하여 마이크로게이트웨이에 새로운 기능을 플러그인을 사용합니다. 커스텀 플러그인을 사용하면 프로그래매틱 방식으로 요청과 상호작용할 수 있습니다. 마이크로서비스로 전송되는 요청에 액세스할 수 있습니다
Edge Microgateway에 플러그인을 배포하는 방법에는 두 가지가 있습니다. Docker 컨테이너에서 실행되는 인스턴스
이 섹션의 나머지 부분에서는 애플리케이션을 작성하고 구성하는 데 익숙한 표준 Edge Microgateway 설정용 플러그인입니다. 그렇지 않은 경우 맞춤 플러그인 개발을 참고하세요.
옵션 A: 볼륨에 플러그인 디렉터리 마운트
(v.2.5.27에 추가됨) 볼륨 마운트를 통해 플러그인을 추가하는 단계는 다음과 같습니다.
Edge Microgateway에 커스텀 플러그인을 추가하는 데 필요한 단계와 비슷합니다. 날짜
Docker 컨테이너를 실행하면 플러그인 디렉터리를 로컬
시스템(볼륨)으로 설정합니다(/opt/apigee/plugins
).
그런 다음 Edge Microgateway 구성 파일에 로컬 볼륨 디렉터리를 지정합니다.
다음 단계는 Docker 마운트 지점을 사용하여 커스텀 사용합니다.
Edge Microgateway를 중지합니다.
edgemicro stop
맞춤 플러그인을 위한 디렉터리를 만듭니다. 예를 들어
$HOME/edgemicro/custom/plugins
커스텀 플러그인 디렉터리를 Edge Microgateway 구성 파일에 추가합니다. 예를 들면 다음과 같습니다.
plugins: dir: $HOME/edgemicro/custom/plugins sequence: - oauth - response-uppercase ````
간단한 플러그인 작성의 안내에 따라 플러그인을 작성하고 테스트합니다. 반드시 플러그인 코드를 올바른 디렉토리 구조에 배치해야 합니다. 예를 들면 다음과 같습니다.
custom | |-- plugins | |- response-uppercase | |- index.js | |- package.json |- request-headers | | - index.js | - package.json
다음과 유사한 명령어를 사용하여 Docker 컨테이너를 실행합니다. 여기에서
-v
옵션을 사용하여 Docker 볼륨에 플러그인 디렉터리를 마운트합니다. 다음 명령어 예는 플러그인 디렉터리$HOME/edgemicro/custom/plugins
입니다. (커스텀 플러그인이 있는 위치)는 컨테이너의 마운트 지점/opt/apigee/plugins
에 매핑됩니다.docker run -P -p 8000:8000 -d --name edgemicro \ -v /var/tmp:/opt/apigee/logs \ -v $HOME/edgemicro/custom/plugins:/opt/apigee/plugins \ -e EDGEMICRO_PROCESSES=1 \ -e EDGEMICRO_ORG=jdoe \ -e EDGEMICRO_ENV=test \ -e EDGEMICRO_KEY=39c4b561100cd7f258768d1072f3e1d7c17b5f36a18fe89972bb5c9ce7e58fb \ -e EDGEMICRO_SECRET=f5f9e239a38b4e6cc99c2aa067716a84aebdcff9580a7925fc500e402b1a5fa \ -e "EDGEMICRO_CONFIG=$EDGEMICRO_CONFIG" \ -e SERVICE_NAME=edgemicro \ --security-opt=no-new-privileges \ --cap-drop=ALL gcr.io/apigee-microgateway/edgemicro:latest
API를 호출하여 플러그인을 테스트합니다.
자세한 내용은 볼륨[공유 파일 시스템]을 참조하세요.
옵션 B: 컨테이너에 플러그인 빌드
이 옵션에서는 컨테이너에 플러그인을 빌드합니다.
1. 플러그인 패키징
간단한 플러그인 작성의 안내에 따라 플러그인을 작성하고 테스트합니다.
플러그인 코드를 적절한 디렉터리 구조에 배치합니다. 플러그인 디렉터리는 설정된 구조를 따라야 합니다. 다음 예는 따라야 하는 구조를 보여줍니다. 여기서
response-uppercase
및request-headers
은 커스텀 플러그인 코드가 포함된 폴더의 이름 (이 이름은 예시일 뿐이며, 폴더 이름은 다를 수 있음).plugin | |-- plugins | |- response-uppercase | |- index.js | |- package.json |- request-headers | | - index.js | - package.json
plugin
폴더로cd
하세요.plugin
폴더에서plugins
폴더 전체를 압축합니다.zip -r plugins.zip plugins/
2. Docker 이미지 만들기
다음으로 Dockerfile을 만들어 Edge Microgateway 이미지에 플러그인 코드를 추가합니다.
- ZIP 파일이 있는 디렉터리에서
Dockerfile
라는 새 파일을 만듭니다. 다음 코드를
Dockerfile
에 추가하고 파일을 저장합니다.USER root RUN apk update && \ apk upgrade && \ apk add zipapk add zip && \ mkdir /opt/apigee/customplugins && \ chown apigee:apigee /opt/apigee/customplugins COPY plugins.zip /opt/apigee/customplugins RUN su - apigee -c "unzip /opt/apigee/customplugins/plugins.zip -d /opt/apigee/customplugins" EXPOSE 8000 EXPOSE 8443 USER apigee ENTRYPOINT ["entrypoint"]
플러그인을 사용하여 새 Edge Microgateway Docker 이미지를 만듭니다.
docker build -t image-name .
예를 들면 다음과 같습니다.
docker build -t edgemicroplugins .
3. Edge Microgateway 구성을 업데이트합니다.
이제 플러그인이 패키징되었으므로 Edge Microgateway에 플러그인을 추가해야 합니다. 구성 파일을 참조하세요.
편집기에서 Edge Microgateway 구성 파일을 엽니다.
$HOME/.edgemicro/org-env-config.yaml
예를 들면 다음과 같습니다.
vi $HOME/.edgemicro/myorg-test-config.yaml
구성 파일에 플러그인 디렉터리를 추가합니다. 다음 예에서
dir
속성은 개발자가 지정한 플러그인 코드의 위치를 지정합니다. 참조). 플러그인 디렉터리의 이름도 지정해야 합니다. 는response-uppercase
입니다.edgemicro: ... plugins: dir: /opt/apigee/plugins sequence: - oauth - response-uppercase
4. Microgateway 시작
마지막으로 컨테이너에서 마이크로 게이트웨이를 시작해야 합니다.
다음 명령어를 실행하여 Edge Microgateway 구성 파일을 base64로 인코딩합니다. 위치:
$HOME/.edgemicro
export EDGEMICRO_CONFIG=`base64 $HOME/.edgemicro/your_org-your_env-config.yaml`
여기서
your_org
및your_env
은(는) 다음에 해당할 때 사용한 조직 및 환경입니다.edgemicro config
명령어를 실행했습니다명령어 주위에 백틱 (`)을 배치해야 합니다. 예를 들면 다음과 같습니다.
export EDGEMICRO_CONFIG=`base64 $HOME/.edgemicro/docs-test-config.yaml`
Edge Microgateway를 컨테이너로 실행합니다. 이 명령어는 여러 환경 변수를 설정합니다. Edge Microgateway를 시작하는 데 사용되는 컨테이너 런타임입니다.
docker run -P -p 8000:8000 -d --name edgemicroplugins \ -e EDGEMICRO_PLUGIN_DIR=/opt/apigee/customplugins/plugins \ -e EDGEMICRO_ORG=your_org \ -e EDGEMICRO_ENV=your_env \ -e EDGEMICRO_KEY=your_key \ -e EDGEMICRO_SECRET=your_secret \ -e "EDGEMICRO_CONFIG=$EDGEMICRO_CONFIG" \ -e SERVICE_NAME=edgemicroplugins image_name
예를 들면 다음과 같습니다.
docker run -P -p 8000:8000 -d --name edgemicroplugins \ -e EDGEMICRO_PLUGIN_DIR=/opt/apigee/customplugins/plugins \ -e EDGEMICRO_ORG=docs \ -e EDGEMICRO_ENV=test \ -e EDGEMICRO_KEY=d9c34e1aff68ed969273b016699eabf48780e4f652242e72fc88a23e21252cb0 \ -e EDGEMICRO_SECRET=3bc95a71c86a3c8ce04137fbcb788158731t51dfc6cdec13b7c05aa0bd969430 \ -e "EDGEMICRO_CONFIG=$EDGEMICRO_CONFIG" \ -e SERVICE_NAME=edgemicroplugins edgemicroplugins
API를 호출하여 플러그인을 테스트합니다.
API를 호출하고 다음과 같이 예상대로 출력됩니다.
curl -i http://localhost:8000/hello -H "x-api-key:apikey"
예를 들어
response-uppercase
플러그인은 다음과 같은 응답을 반환할 수 있습니다.curl -i http://localhost:8000/hello -H "x-api-key:PydUKRDGIXRqF2xh4usn1FLHbhGKVIz" HELLO, WORLD!