การใช้ Docker สำหรับ Edge Microgateway

คุณกำลังดูเอกสารประกอบของ Apigee Edge
ไปที่เอกสารประกอบของ Apigee X
info

หัวข้อนี้อธิบายวิธีเรียกใช้ Edge Microgateway ในคอนเทนเนอร์ Docker ขั้นตอน ที่กล่าวถึงในหัวข้อนี้ถือว่าคุณมีความเข้าใจพื้นฐานเกี่ยวกับ Docker, คำสั่ง Docker รวมถึงการตั้งค่าและการกำหนดค่า Edge Microgateway ดูข้อมูลเพิ่มเติมได้ในเอกสารประกอบสำหรับ Docker และ Edge Microgateway

ข้อกำหนดเบื้องต้น

ก่อนเรียกใช้ Edge Microgateway ในคอนเทนเนอร์ Docker คุณต้องทําสิ่งต่อไปนี้

  • กำหนดค่า Edge Microgateway สำหรับองค์กร/สภาพแวดล้อม Apigee ดังนี้

    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 คุณจะต้องใช้ไฟล์นี้เมื่อเริ่ม Edge Microgateway ในคอนเทนเนอร์ Docker

  • ตรวจสอบว่าคุณมีข้อมูลเข้าสู่ระบบคีย์และข้อมูลลับที่ระบบส่งคืนเมื่อคุณเรียกใช้คำสั่ง edgemicro config เช่น

    The following credentials are required to start edge micro
      key: d9c34e1aff68ed969273c016699eabf48780e4f652242e72fc88a43e21252cb0
      secret: 3bc95a71c86a3c8ce04537fbcb788158731t51dfc6cdec13b7c05aa0bd969430
    
  • ก่อนที่จะเริ่ม Edge Microgateway ในคอนเทนเนอร์ Docker คุณต้องสร้าง (หรือสร้างไว้แล้ว) เอนทิตี Apigee Edge ที่จำเป็น ในการเรียกพร็อกซี API ที่ตรวจสอบสิทธิ์แล้ว เอนทิตีเหล่านี้ประกอบด้วยพร็อกซีที่รับรู้ Edge Microgateway ผลิตภัณฑ์ API นักพัฒนาแอป และแอปของนักพัฒนาแอป ดูวิธีการทั้งหมดได้ที่ สร้างเอนทิตีใน Apigee Edge

เรียกใช้ Edge Micro เป็นคอนเทนเนอร์ Docker

  1. ดาวน์โหลดอิมเมจ Docker สำหรับ Edge Microgateway

    docker pull gcr.io/apigee-microgateway/edgemicro:latest
  2. ก่อนที่จะไปยังขั้นตอนถัดไป โปรดตรวจสอบว่าคุณได้ทำตามขั้นตอนทั้งหมดในส่วนข้อกำหนดเบื้องต้นแล้ว

  3. เรียกใช้คำสั่งต่อไปนี้เพื่อเข้ารหัสไฟล์การกำหนดค่า 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`
  4. เรียกใช้ Edge Microgateway เป็นคอนเทนเนอร์ คำสั่งนี้จะตั้งค่าตัวแปรสภาพแวดล้อมหลายรายการ ที่รันไทม์ของคอนเทนเนอร์ใช้เพื่อเริ่ม Edge Microgateway ดังนี้

    chown -R 100:101 ~/.edgemicro/ \
    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 Run ด้วย
    -p จับคู่พอร์ตเดียวหรือช่วงของพอร์ตอย่างชัดแจ้ง โปรดดูข้อมูลอ้างอิงของ Docker Run ด้วย
    -d เรียกใช้ในโหมดแยก โปรดดูข้อมูลอ้างอิงของ Docker Run ด้วย
    -v, --volume ระบุการติดตั้งโวลุ่ม โปรดทราบว่าหากกำหนดค่า Edge Microgateway ให้ใช้ TLS ในคอนเทนเนอร์ Docker คุณต้องเปิดเผยพอร์ต 8443 หาก เมานต์ไดเรกทอรีไฟล์บันทึก ดู VOLUME [shared filesystems] เพิ่มเติม ดูเพิ่มเติมที่การใช้ TLS ในคอนเทนเนอร์ Docker
    EDGEMICRO_ORG ชื่อองค์กร Apigee ที่คุณใช้กำหนดค่า Edge Microgateway
    EDGEMICRO_ENV ชื่อสภาพแวดล้อม Apigee ที่คุณใช้กำหนดค่า Edge Microgateway
    EDGEMICRO_PROCESSES จำนวนกระบวนการที่จะเริ่มต้น
    EDGEMICRO_KEY คีย์ที่แสดงเมื่อคุณกำหนดค่า Edge Microgateway
    EDGEMICRO_SECRET ข้อมูลลับที่ส่งคืนเมื่อคุณกำหนดค่า Edge Microgateway
    EDGEMICRO_CONFIG ตัวแปรที่มีไฟล์การกำหนดค่า Edge Microgateway ที่เข้ารหัส Base64
    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 ไม่น่าเชื่อถือโดยค่าเริ่มต้น ตั้งค่าพารามิเตอร์นี้เป็นเส้นทางไปยังไฟล์ที่มีใบรับรองที่เชื่อถือได้อย่างน้อย 1 รายการในรูปแบบ PEM โปรดดูรายละเอียดที่ใบรับรอง TLS
    --security-opt (ไม่บังคับ) ตั้งค่าตัวเลือกความปลอดภัยของ Docker ที่ต้องการ ดูการกำหนดค่าความปลอดภัยในเอกสารประกอบของ Docker
    --cap-drop (ไม่บังคับ) กำหนดขีดจำกัดความสามารถของ Linux ที่อนุญาตในคอนเทนเนอร์ ดูสิทธิ์รันไทม์และความสามารถของ Linux ในเอกสารประกอบของ Docker

    เช่น

    chown -R 100:101 ~/.edgemicro/ \
    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
  5. วิธีตรวจสอบว่าคอนเทนเนอร์ทำงานอยู่หรือไม่

    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 ไปยัง Edge Microgateway ได้ ตัวอย่างเช่น หากเส้นทางฐานของ API คือ /hello

http://localhost:8000/hello

ตัวอย่างเอาต์พุต

{"error":"missing_authorization","error_description":"Missing Authorization header"}

หากเห็นการตอบกลับนี้ แสดงว่า Edge Microgateway จัดการการเรียก API ได้สำเร็จ อย่างไรก็ตาม โดยค่าเริ่มต้น Edge Microgateway จะต้องใช้คีย์ API ในการตรวจสอบสิทธิ์ ในส่วนถัดไป คุณจะทดสอบ API ด้วยคีย์ API ที่ถูกต้อง

ทดสอบ API ด้วยคีย์ API ที่ถูกต้อง

ใน UI ของ Edge ให้ไปที่แอปสำหรับนักพัฒนาซอฟต์แวร์ที่คุณสร้างไว้ก่อนหน้านี้ ในหน้าแอปของนักพัฒนาซอฟต์แวร์ ให้แสดงคีย์ผู้ใช้และคัดลอก ค่านี้คือคีย์ API คุณจะใช้คีย์นี้เพื่อทำการเรียก API ที่มีการตรวจสอบสิทธิ์

เรียก API ด้วยส่วนหัว x-api-key ดังนี้ ค่าคีย์ผู้ใช้ที่คุณ คัดลอกจากแอปนักพัฒนาซอฟต์แวร์คือคีย์ 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"

หากต้องการดูข้อมูลเพิ่มเติมเกี่ยวกับการเรียก API ที่มีการตรวจสอบสิทธิ์ผ่าน Edge Microgateway ด้วยคีย์ API และโทเค็น OAuth โปรดดูส่วนที่ 4: รักษาความปลอดภัย Edge Microgateway

การหยุด Edge Microgateway

ใช้คำสั่ง Docker ต่อไปนี้เพื่อหยุด Edge Microgateway

docker stop edgemicro

การรีสตาร์ท Edge Microgateway

หลังจากหยุด Edge Microgateway แล้ว คุณจะรีสตาร์ทได้ด้วยคำสั่ง Docker นี้

docker start edgemicro

การใช้ TLS ในคอนเทนเนอร์ Docker

ส่วนนี้จะอธิบายวิธีกำหนดค่า TLS สำหรับ Edge Microgateway ที่ทำงาน ในคอนเทนเนอร์ Docker คุณสามารถกำหนดค่าเซิร์ฟเวอร์ Edge Microgateway ให้ใช้ TLS สำหรับคำขอขาเข้า (ทิศทางเหนือ) และกำหนดค่า Edge Microgateway ให้เป็นไคลเอ็นต์ TLS สำหรับคำขอขาออกไปยังปลายทางเป้าหมาย (ทิศทางใต้)

ตำแหน่งที่จะวางไฟล์ใบรับรอง

คอนเทนเนอร์ Docker ที่เรียกใช้ Edge Microgateway มีจุดต่อเชื่อมใน /opt/apigee/.edgemicro เมื่อกำหนดค่า Edge Microgateway ให้ใช้ใบรับรอง TLS คุณจะทำให้ไฟล์ใบรับรองพร้อมใช้งานในจุดต่อเชื่อมนั้นและอ้างอิงถึงไฟล์เหล่านั้นในไฟล์การกำหนดค่า 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
...

การใช้ CA ที่ Node.js ไม่เชื่อถือ

หากคุณใช้ผู้ออกใบรับรอง (CA) ที่ Node.js ไม่เชื่อถือโดยค่าเริ่มต้น (เช่น กรณีของใบรับรองแบบ Self-signed) ให้พิจารณาใช้พารามิเตอร์ NODE_EXTRA_CA_CERTS เมื่อเรียกใช้คอนเทนเนอร์

ตั้งค่าพารามิเตอร์นี้เป็นเส้นทางไปยังไฟล์ที่มีใบรับรองที่เชื่อถือได้อย่างน้อย 1 รายการในรูปแบบ PEM ดูวิธีใช้พารามิเตอร์นี้ได้ที่ตัวอย่างวิธีกำหนดค่า TLS ขาออกและวิธีกำหนดค่า TLS ขาเข้า

เช่น

chown -R 100:101 ~/.edgemicro/ \
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 ไม่ได้สร้างไว้ในคอนเทนเนอร์ Docker ของ Edge Microgateway โดยค่าเริ่มต้น หากต้องการทำงานนี้ให้เสร็จสมบูรณ์ คุณต้องสร้างอิมเมจ Docker ที่กำหนดเองสำหรับ Edge Microgateway ด้านล่างนี้ เป็นวิธีการทั่วไปในการสร้างอิมเมจที่กำหนดเองและปิดการตรวจสอบ TLS

  1. โคลนหรือดาวน์โหลดที่เก็บแหล่งที่มาของ Edge Microgateway จาก https://github.com/apigee-internal/microgateway

  2. cd ไปยังไดเรกทอรี microgateway/kubernetes/docker/edgemicro ในไดเรกทอรีซอร์สโค้ด

    เช่น

    cd $HOME/git/microgateway/kubernetes/docker/edgemicro
    
  3. เปิดไฟล์ entrypoint.sh แล้วแก้ไขโค้ดเพื่อยอมรับตัวแปรสภาพแวดล้อม NODE_TLS_REJECT_UNAUTHORIZED ต่อมาเมื่อเรียกใช้คอนเทนเนอร์ คุณจะต้องระบุค่าสำหรับตัวแปรนี้

  4. สร้างคอนเทนเนอร์ Docker

    docker build -t edgemicro .
    
  5. เมื่อเรียกใช้คอนเทนเนอร์ ให้ระบุตัวเลือก -e NODE_TLS_REJECT_UNAUTHORIZED = 1 เช่น

chown -R 100:101 ~/.edgemicro/ \
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

ตัวอย่าง: วิธีกำหนดค่า TLS ขาออก

ส่วนนี้จะอธิบายวิธีตั้งค่าการเชื่อมต่อ TLS ขาเข้า (ขาขึ้น) ในเซิร์ฟเวอร์ Edge Microgateway TLS ขาออกช่วยให้ไคลเอ็นต์ใช้ HTTPS เมื่อทำการเรียก API ไปยัง Edge Microgateway ได้ ตัวอย่างด้านล่างใช้ใบรับรอง Self-signed

1. ขั้นตอนการตั้งค่าเริ่มต้น

  1. ค้นหาไฟล์ openssl.cnf ในระบบ เช่น /etc/ssl/openssl.cnf
  2. เปิดไฟล์ opensssl.cnf เพื่อแก้ไข
  3. ตรวจสอบว่ามี req_extensions ในไฟล์การกำหนดค่า ตัวอย่างเช่น คุณ ควรมีข้อมูลที่คล้ายกับข้อมูลต่อไปนี้ในไฟล์

    [ req ]
    ...
    req_extensions          = v3_req
    ...
    
    [ v3_req ]
    extendedKeyUsage = serverAuth, clientAuth, codeSigning, emailProtection
    basicConstraints = CA:FALSE
    keyUsage = nonRepudiation, digitalSignature, keyEncipherment
    
  4. เพิ่มส่วนต่อไปนี้ลงใน 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
    
  5. ทำตามขั้นตอนที่ระบุไว้ในส่วนข้อกำหนดเบื้องต้นเพื่อเริ่มต้นและ กำหนดค่า Edge Microgateway หากยังไม่ได้ดำเนินการ เมื่อเสร็จแล้ว คุณ ควรสร้างพร็อกซีที่รับรู้ Edge Microgateway, ผลิตภัณฑ์ API, นักพัฒนาแอป และแอปของนักพัฒนาแอป นอกจากนี้ คุณควรเรียกใช้คำสั่ง edgemicro configure และได้รับคีย์และรหัสลับ

2. สร้างใบรับรองที่ลงนามด้วยตนเอง

จากนั้นสร้างใบรับรองและคีย์ที่คุณจะต้องใช้เพื่อสร้าง TLS โดยทำดังนี้

  1. cd ไปยังไดเรกทอรี $HOME/.edgemicro
  2. สร้างสคริปต์ 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
    
  3. ในไฟล์ Bash ให้ตรวจสอบว่าเส้นทางไปยังไฟล์ openssl.cnf ถูกต้อง

  4. เรียกใช้ไฟล์ Bash ระบบจะแจ้งให้คุณระบุข้อมูลใบรับรอง โปรดใช้ localhost สำหรับชื่อทั่วไป

  5. ตรวจสอบว่ามีการสร้างไฟล์ต่อไปนี้

    • rootca.key
    • rootca.pem
    • tls.key
    • tls.csr
    • rootca.srl
    • tls.crt

3. แก้ไขไฟล์การกำหนดค่า Edge Microgateway

  1. เปิดไฟล์การกำหนดค่า Edge Micro ในโปรแกรมแก้ไข เช่น

    vi $HOME/.edgemicro/myorg-test-config.yaml
    
  2. แก้ไข Stanza 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:
    ...
    
  3. เรียกใช้คำสั่งต่อไปนี้เพื่อเข้ารหัส base64 ไฟล์การกำหนดค่า Edge Microgateway ซึ่งอยู่ใน $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. เรียกใช้คอนเทนเนอร์

  1. เรียกใช้คำสั่งต่อไปนี้เพื่อเรียกใช้คอนเทนเนอร์ Docker ด้วย Edge Microgateway

    chown -R 100:101 ~/.edgemicro/ \
    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
    
  2. โปรดทราบพารามิเตอร์ต่อไปนี้ที่ใช้ในคำสั่ง ซึ่งแตกต่างจากคำสั่งพื้นฐานที่อธิบายไว้ในเรียกใช้ Edge Micro เป็นคอนเทนเนอร์ Docker

    • ตั้งค่า port เป็น 8443
    • ใช้การติดตั้งโวลุ่มเพื่อติดตั้งไฟล์คีย์และไฟล์ใบรับรอง
    • ตัวแปร NODE_EXTRA_CA_CERTS ใช้เพื่อเพิ่ม CA ที่กำหนดเอง (ตามที่จำเป็นในกรณีของใบรับรองที่ลงนามด้วยตนเอง)

5. ทดสอบการกำหนดค่า TLS

  1. เรียกใช้คำสั่ง cURL ต่อไปนี้เพื่อทดสอบการตั้งค่า แทนที่ basepath และคีย์ API ในคำสั่ง ตัวอย่างต่อไปนี้ถือว่าคุณอยู่ในไดเรกทอรีที่มี rootca.pem และพร็อกซีที่คุณสร้างมีเส้นทางฐาน /hello

    curl -v https://localhost:8443/hello --cacert rootca.pem \
    -H "x-api-key: Az82fdnfONVCOOE4NKhajxAboDgA3FAo"
    
  2. เอาต์พุต 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 ขาออก

ส่วนนี้อธิบายวิธีตั้งค่าการเชื่อมต่อ TLS ขาออกระหว่างเซิร์ฟเวอร์ Edge Microgateway กับแอปพลิเคชันเป้าหมายแบ็กเอนด์ ตัวอย่างด้านล่างใช้ ใบรับรองแบบ Self-signed

1. ขั้นตอนการตั้งค่าเบื้องต้น

  1. ค้นหาไฟล์ openssl.cnf ในระบบ เช่น /etc/ssl/openssl.cnf
  2. เปิดไฟล์ opensssl.cnf เพื่อแก้ไข
  3. ตรวจสอบว่ามี req_extensions ในไฟล์การกำหนดค่า ตัวอย่างเช่น คุณ ควรมีข้อมูลที่คล้ายกับข้อมูลต่อไปนี้ในไฟล์

    [ req ]
    ...
    req_extensions          = v3_req
    ...
    
    [ v3_req ]
    extendedKeyUsage = serverAuth, clientAuth, codeSigning, emailProtection
    basicConstraints = CA:FALSE
    keyUsage = nonRepudiation, digitalSignature, keyEncipherment
    
  4. เพิ่มส่วนต่อไปนี้ลงใน 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
    
  5. เรียกใช้คำสั่ง edgemicro configure

    edgemicro configure -o your_org -e your_env -u your_username

    ดูรายละเอียดเพิ่มเติมเกี่ยวกับการกำหนดค่าได้ที่ส่วนที่ 1: กำหนดค่า Edge Microgateway

  6. คัดลอกข้อมูลเข้าสู่ระบบคีย์และลับที่ส่งคืนจาก edgemicro configure คุณจะต้องใช้ค่าเหล่านี้เพื่อเรียกใช้คอนเทนเนอร์ เช่น

    The following credentials are required to start edge micro
      key: d9c34e1aff68ed969273c016699eabf48780e4f652242e72fc88a43e21252cb0
      secret: 3bc95a71c86a3c8ce04537fbcb788158731t51dfc6cdec13b7c05aa0bd969430
    

2. สร้างแอปพลิเคชันเป้าหมาย Node.js

  1. cd ไปยังไดเรกทอรี .edgemicro

  2. สร้างสคริปต์ 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
    
  3. ในไฟล์ Bash ให้ตรวจสอบว่าเส้นทางไปยังไฟล์ openssl.cnf ถูกต้อง

  4. เรียกใช้ไฟล์ Bash ระบบจะแจ้งให้คุณระบุข้อมูลใบรับรอง โปรดใช้ hellworld สำหรับชื่อทั่วไป

  5. ตรวจสอบว่ามีการสร้างไฟล์ต่อไปนี้

    • rootca.key
    • rootca.pem
    • tls.key
    • tls.csr
    • rootca.srl
    • tls.crt
  6. สร้างไฟล์ใหม่ชื่อ 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);
    
  7. สร้างไฟล์ package.json ในไดเรกทอรีเดียวกับ server.js เช่น

    {
      "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"
      }
    }
    
  8. เรียกใช้ npm install เพื่อรับการอ้างอิง

  9. สร้าง Dockerfile ใหม่ในไดเรกทอรีเดียวกับ server.js โดยที่ 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" ]
    
  10. สร้างอิมเมจ Docker โดยใช้คำสั่งต่อไปนี้

    docker build -t helloworld . 
    
  11. เปิดแอปตัวอย่างโดยทำดังนี้

    docker run -P -p 9443:9443 --name helloworld helloworld
    

3. สร้างเอนทิตีใน Apigee Edge

  1. สร้างพร็อกซีที่รับรู้ Edge Microgateway ด้วยการตั้งค่าต่อไปนี้ ดูข้อมูลเพิ่มเติมได้ที่สร้างพร็อกซี API ที่รับรู้ Edge Microgateway ใน Edge

    • ชื่อพร็อกซี: edgemicro_local
    • การแก้ไข: 1
    • Basepath: /local
    • เป้าหมาย: https://helloworld:9443
  2. สร้างผลิตภัณฑ์ API ดูรายละเอียดได้ที่สร้างผลิตภัณฑ์

  3. สร้างนักพัฒนาแอป โปรดดูรายละเอียดที่หัวข้อสร้างนักพัฒนาแอป

  4. สร้างแอปนักพัฒนาซอฟต์แวร์ ดูรายละเอียดได้ที่สร้างแอปนักพัฒนาซอฟต์แวร์

4. เรียกใช้คอนเทนเนอร์

  1. เปิดไฟล์การกำหนดค่า Edge Micro ในโปรแกรมแก้ไข เช่น

    vi $HOME/.edgemicro/myorg-test-config.yaml
    
  2. แก้ไข Stanza 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:
    ...
    
  3. เรียกใช้คำสั่งต่อไปนี้เพื่อเข้ารหัส base64 ไฟล์การกำหนดค่า Edge Microgateway ที่อยู่ใน $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`
  4. เรียกใช้คำสั่งต่อไปนี้เพื่อเริ่ม Edge Microgateway ในคอนเทนเนอร์ Docker

    chown -R 100:101 ~/.edgemicro/ \
    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

  1. เรียกใช้คำสั่ง cURL ต่อไปนี้เพื่อทดสอบการตั้งค่า แทนที่ เส้นทางฐานที่คุณใช้ในพร็อกซีที่รองรับ Microgateway และ คีย์ API ที่ได้จากแอปนักพัฒนาซอฟต์แวร์ที่คุณสร้างใน Apigee Edge เช่น

    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"}
    
  2. เรียกใช้ Edge Microgateway อีกครั้ง แต่คราวนี้ให้เพิ่มตัวแปร NODE_EXTRA_CA_CERTS

    chown -R 100:101 ~/.edgemicro/ \
    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
    
  3. เรียกใช้คำสั่ง cURL ต่อไปนี้ แทนที่ basepath และคีย์ API ของคุณเช่นเดิม เช่น

    curl https://localhost:8443/local -k -H "x-api-key: xxxx" -v
    
  4. ตรวจสอบเอาต์พุต เมื่อสำเร็จ คุณจะได้รับการตอบกลับสถานะ 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
    

การเพิ่มปลั๊กอินที่กำหนดเอง

คุณเพิ่มฟีเจอร์และความสามารถใหม่ๆ ลงใน Microgateway ได้โดยการเขียนปลั๊กอินที่กำหนดเอง ปลั๊กอินที่กำหนดเองช่วยให้คุณโต้ตอบกับคำขอและการตอบกลับที่ไหลผ่าน Microgateway ได้แบบเป็นโปรแกรม

คุณมี 2 ตัวเลือกในการติดตั้งใช้งานปลั๊กอินกับอินสแตนซ์ Edge Microgateway ที่ทำงานในคอนเทนเนอร์ Docker ดังนี้

ส่วนที่เหลือของส่วนนี้จะถือว่าคุณคุ้นเคยกับการเขียนและการกำหนดค่าปลั๊กอิน สำหรับการตั้งค่า Edge Microgateway มาตรฐาน หากไม่เป็นเช่นนั้น โปรดดูพัฒนาปลั๊กอินที่กำหนดเอง

ตัวเลือก ก: เมานต์ไดเรกทอรีปลั๊กอินบนวอลุ่ม

(เพิ่มใน v.2.5.27) ขั้นตอนการเพิ่มปลั๊กอินผ่านการติดตั้งโวลุ่มจะคล้ายกับขั้นตอนที่จำเป็นในการเพิ่มปลั๊กอินที่กำหนดเองลงใน Edge Microgateway เมื่อเรียกใช้คอนเทนเนอร์ Docker คุณจะต่อเชื่อมไดเรกทอรีปลั๊กอินในระบบภายใน (วอลุ่ม) ที่จุดต่อเชื่อมคอนเทนเนอร์ ซึ่งก็คือ /opt/apigee/plugins ได้ จากนั้นระบุไดเรกทอรีของโวลุ่มในเครื่องในไฟล์การกำหนดค่า Edge Microgateway

ขั้นตอนต่อไปนี้แสดงวิธีใช้จุดต่อเชื่อม Docker เพื่อรวมปลั๊กอินที่กำหนดเอง

  1. หยุด Edge Microgateway

    edgemicro stop
    
  2. สร้างไดเรกทอรีสำหรับปลั๊กอินที่กำหนดเอง เช่น สร้าง

    $HOME/edgemicro/custom/plugins
    
  3. เพิ่มไดเรกทอรีปลั๊กอินที่กำหนดเองลงในไฟล์การกำหนดค่า Edge Microgateway เช่น

      plugins:
        dir: $HOME/edgemicro/custom/plugins
        sequence:
          - oauth
          - response-uppercase
      ````
    
  4. เขียนและทดสอบปลั๊กอินตามวิธีการในเขียนปลั๊กอินอย่างง่าย อย่าลืม วางโค้ดปลั๊กอินในโครงสร้างไดเรกทอรีที่เหมาะสม เช่น

    custom
      |
      |-- plugins
        |
        |- response-uppercase
        |     |- index.js
        |     |- package.json
        |- request-headers
        |     | - index.js
              | - package.json
    
  5. เรียกใช้คอนเทนเนอร์ Docker ด้วยคำสั่งที่คล้ายกับคำสั่งต่อไปนี้ โดยคุณใช้ตัวเลือก -v เพื่อติดตั้งไดเรกทอรีปลั๊กอินในวอลุ่ม Docker ในคำสั่งตัวอย่างต่อไปนี้ ไดเรกทอรีปลั๊กอิน $HOME/edgemicro/custom/plugins (ที่เก็บปลั๊กอินที่กำหนดเอง) จะแมปกับจุดต่อเชื่อมของคอนเทนเนอร์ /opt/apigee/plugins

    chown -R 100:101 ~/.edgemicro/ \
    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
    
  6. เรียก API เพื่อทดสอบปลั๊กอิน

ดูข้อมูลเพิ่มเติมได้ที่ VOLUME [ระบบไฟล์ที่ใช้ร่วมกัน]

ตัวเลือก ข: สร้างปลั๊กอินลงในคอนเทนเนอร์

ในตัวเลือกนี้ คุณจะสร้างปลั๊กอินลงในคอนเทนเนอร์

1. แพ็กเกจปลั๊กอิน

  1. เขียนและทดสอบปลั๊กอินตามวิธีการในเขียนปลั๊กอินอย่างง่าย

  2. วางโค้ดปลั๊กอินในโครงสร้างไดเรกทอรีที่เหมาะสม ไดเรกทอรีปลั๊กอินต้องมีโครงสร้างที่กำหนด ตัวอย่างต่อไปนี้แสดงโครงสร้างที่คุณต้องทำตาม โดย response-uppercase และ request-headers คือ ชื่อของโฟลเดอร์ที่มีโค้ดปลั๊กอินที่กำหนดเอง (ชื่อเหล่านี้เป็นเพียงตัวอย่างเท่านั้น ชื่อโฟลเดอร์ของคุณอาจแตกต่างกัน)

    plugin
      |
      |-- plugins
        |
        |- response-uppercase
        |     |- index.js
        |     |- package.json
        |- request-headers
        |     | - index.js
              | - package.json
    
  3. cd ไปยังโฟลเดอร์ plugin

  4. ในโฟลเดอร์ plugin ให้บีบอัดโฟลเดอร์ plugins ทั้งหมด

    zip -r plugins.zip plugins/

2. สร้างอิมเมจ Docker

จากนั้นสร้าง Dockerfile เพื่อเพิ่มโค้ดปลั๊กอินลงในอิมเมจ Edge Microgateway

  1. ในไดเรกทอรีเดียวกันกับที่ไฟล์ ZIP อยู่ ให้สร้างไฟล์ใหม่ชื่อ Dockerfile
  2. เพิ่มโค้ดต่อไปนี้ลงใน 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"]
    
  3. สร้างอิมเมจ Docker ของ Edge Microgateway ใหม่ด้วยปลั๊กอินของคุณ

    docker build -t image-name .

    เช่น

    docker build -t edgemicroplugins .

3. อัปเดตการกำหนดค่า Edge Microgateway

เมื่อแพ็กเกจปลั๊กอินแล้ว คุณต้องเพิ่มปลั๊กอินลงในไฟล์การกำหนดค่า Edge Microgateway

  1. เปิดไฟล์การกำหนดค่า Edge Microgateway ในโปรแกรมแก้ไข

    $HOME/.edgemicro/org-env-config.yaml
    

    เช่น

    vi $HOME/.edgemicro/myorg-test-config.yaml
  2. เพิ่มไดเรกทอรีปลั๊กอินลงในไฟล์การกำหนดค่า ในตัวอย่างต่อไปนี้ แอตทริบิวต์ dir จะระบุตำแหน่งของโค้ดปลั๊กอิน (ซึ่งคุณระบุไว้ใน Dockerfile) นอกจากนี้ คุณต้องระบุชื่อของไดเรกทอรีปลั๊กอินด้วย ซึ่งในตัวอย่างด้านล่างคือ response-uppercase

    edgemicro:
      ...
      plugins:
        dir: /opt/apigee/plugins
        sequence:
          - oauth
          - response-uppercase
    

4. เริ่ม Microgateway

สุดท้าย คุณต้องเริ่ม Microgateway ในคอนเทนเนอร์

  1. เรียกใช้คำสั่งต่อไปนี้เพื่อเข้ารหัสไฟล์การกำหนดค่า 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`
  2. เรียกใช้ 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
  3. เรียก 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!