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

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

หัวข้อนี้จะอธิบายวิธีเรียกใช้ 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-Aware พร็อกซี, ผลิตภัณฑ์ API, นักพัฒนาซอฟต์แวร์ และแอปนักพัฒนาซอฟต์แวร์ ดูวิธีการแบบครบถ้วนได้ที่ สร้างเอนทิตีบน Apigee Edge

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

  1. ดาวน์โหลดอิมเมจ Docker สำหรับ Edge Microgateway โดยใช้คำสั่งต่อไปนี้

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

  3. เรียกใช้คำสั่งต่อไปนี้เพื่อเข้ารหัส base64-encode ไฟล์การกำหนดค่า 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 เป็นคอนเทนเนอร์ คำสั่งจะตั้งค่าตัวแปรสภาพแวดล้อมหลายรายการ ที่รันไทม์ของคอนเทนเนอร์ใช้เพื่อเริ่มต้น 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 "LOG_CONSOLE_OUTPUT_TO_FILE=false" \
    -e SERVICE_NAME=edgemicro \
    --security-opt=no-new-privileges \
    --cap-drop=ALL \
    gcr.io/apigee-microgateway/edgemicro:latest

    พารามิเตอร์

      <tr>
        <td><code>SERVICE_NAME</code></td>
        <td>If you are on Kubernetes, this parameter is auto-populated. Otherwise,
          you can set it to anything you wish. If you specify nothing, the service
          name is set to <code>default</code>.</td>
      </tr>
      <tr>
        <tr>
        <td><code>DEBUG</code></td>
        <td>Set to <code>*</code> to enable debugging. </td>
      </tr>
      <tr>
        <td><code>HTTP_PROXY</code>
            <code>HTTPS_PROXY</code></td>
        <td>Use when Edge Microgateway is
          running behind a firewall and the gateway cannot communicate with Apigee
          Edge. For more
          information, see <a href="operation-and-configuration-reference-edge-microgateway#settingupedgemicrogatewaybehindacompanyfirewall">Setting up Edge Microgateway behind a company firewall</a>. 
          <p>For example: <code>HTTP_PROXY=http://10.203.0.1:5187/</code></p></td>
      </tr>
      <tr>
        <td><code>NO_PROXY</code></td>
        <td>A comma delimited list of domains that Edge Microgateway should not proxy to. 
          For more information, see <a href="operation-and-configuration-reference-edge-microgateway#settingupedgemicrogatewaybehindacompanyfirewall">Setting up Edge Microgateway behind a company firewall</a>.
          <p>For example: <code>localhost,127.0.0.1,localaddress,.localdomain.com</code></p></td>
      </tr>
      <tr>
      <tr>
        <tr>
        <td><code>NODE_EXTRA_CA_CERTS</code></td>
        <td>(Optional) Use this parameter if you are using a CA that's not trusted
          by default by Node.js. Set the value of this parameter to the path to a
          file containing one or more trusted certificates in PEM format. For
          details, see <a href="#tls_certificates">TLS certificates</a>.</td>
      </tr>
      <tr>
        <td><code>--security-opt</code></td>
        <td>(Optional) Sets desired Docker security options. See <a href="https://docs.docker.com/engine/reference/run/#security-configuration">Security configuration</a> in the Docker documentation.</td>
      </tr>
      <tr>
        <td><code>--cap-drop</code></td>
        <td>(Optional) Sets limits on Linux capabilities permitted in the container. See <a href="https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities">Runtime privilege and Linux capabilities</a> in the Docker documentation.</td>
      </tr>
    </tbody>
    

    พารามิเตอร์ คำอธิบาย
    -P เผยแพร่พอร์ตที่เปิดเผยทั้งหมดไปยังโฮสต์ ดูข้อมูลอ้างอิงการเรียกใช้ Docker
    -p จับคู่พอร์ตหนึ่งหรือช่วงของพอร์ตอย่างชัดเจน ดูข้อมูลอ้างอิงการเรียกใช้ Docker
    -d ทำงานในโหมดแยกเดี่ยว ดูข้อมูลอ้างอิงการเรียกใช้ Docker
    -v, -- volume ระบุการต่อเชื่อมวอลุ่ม โปรดทราบว่าหากคุณกำหนดค่า Edge Microgateway หากต้องการใช้ TLS ในคอนเทนเนอร์ Docker คุณต้องแสดงพอร์ต 8443 หาก ต่อเชื่อมไดเรกทอรีไฟล์บันทึก โปรดดูเพิ่มเติมที่ VOLUME [ระบบไฟล์ที่ใช้ร่วมกัน] โปรดดูเพิ่มเติมที่การใช้ TLS ในคอนเทนเนอร์ Docker
    -w, -- workdir (ไม่บังคับ) ระบุเส้นทางไปยังไดเรกทอรีที่ ควรระบุ edgemicro.sock และ edgemicro.pid ไฟล์ สร้าง แล้ว คุณไม่สามารถแก้ไขรูทของชื่อไฟล์ edgemicro ได้ ค่าเริ่มต้นจะเป็นเส้นทางไดเรกทอรีที่ใช้งานอยู่ในปัจจุบัน

    ตัวอย่าง

    docker run -P -p 8000:8000 -d -w /tmp --name edgemicro 
    ...
    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
    LOG_CONSOLE_OUTPUT_TO_FILE (บูลีน) ช่วยให้คุณระบุได้ว่าจะส่งเอาต์พุตบันทึกไปที่ใด โปรดดูการระบุตัวเลือกไฟล์บันทึก

    เช่น

    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

    1. วิธีตรวจสอบว่าคอนเทนเนอร์ทำงานอยู่

      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
      

    การระบุตัวเลือกเอาต์พุตของไฟล์บันทึก

    พารามิเตอร์การกำหนดค่า Edge Microgateway to_console ช่วยให้คุณสามารถเลือกส่งข้อมูลบันทึกไปยังเอาต์พุตมาตรฐานแทนไฟล์บันทึกได้ หากคุณทำตามขั้นตอนเพื่อเรียกใช้ Edge Microgateway ในคอนเทนเนอร์ Docker โดยค่าเริ่มต้น คอนเทนเนอร์จะเปลี่ยนเส้นทาง Stdout และแสดงข้อผิดพลาดไปยังไฟล์ที่อยู่ในคอนเทนเนอร์ที่ตำแหน่ง: ${APIGEE_ROOT}/logs/edgemicro.log

    หากต้องการป้องกันไม่ให้มีการส่งข้อมูลบันทึกไปยัง edgemicro.log ให้ใช้ตัวแปร LOG_CONSOLE_OUTPUT_TO_FILE เมื่อเรียกใช้คอนเทนเนอร์

    ตารางต่อไปนี้จะอธิบายลักษณะเอาต์พุตของบันทึกเมื่อคุณใช้ LOG_CONSOLE_OUTPUT_TO_FILE กับ to_console

    to_console: true

    LOG_CONSOLE_OUTPUT_TO_FILE=false

    • ระบบจะไม่ส่งบันทึกไปยังไฟล์บันทึก Edge Microgateway ตามที่อธิบายไว้ในการจัดการไฟล์บันทึก
    • ระบบจะไม่ส่งบันทึกไปยังไฟล์ edgemicro.log
    to_console: true

    LOG_CONSOLE_OUTPUT_TO_FILE=true

    • ระบบจะไม่ส่งบันทึกไปยังไฟล์บันทึก Edge Microgateway ตามที่อธิบายไว้ในการจัดการไฟล์บันทึก
    • ระบบจะส่งบันทึกไปยังไฟล์ edgemicro.log
    to_console: false

    LOG_CONSOLE_OUTPUT_TO_FILE=true

    • ระบบจะส่งบันทึกไปยังไฟล์บันทึก Edge Microgateway ตามที่อธิบายไว้ในการจัดการไฟล์บันทึก
    • ระบบจะส่งบันทึกไปยังไฟล์ edgemicro.log

    การทดสอบการเรียก API

    หลังจากเริ่มต้น Edge Microgateway ในคอนเทนเนอร์ คุณจะเรียก API ไปยังคอนเทนเนอร์ได้ เช่น หากเส้นทางฐานของ API คือ /hello

    http://localhost:8000/hello

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

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

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

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

    ใน Edge UI ให้ไปที่แอปนักพัฒนาซอฟต์แวร์ที่คุณสร้างไว้ก่อนหน้านี้ ในส่วนนักพัฒนาซอฟต์แวร์ หน้าแอป แสดงคีย์ผู้บริโภคและคัดลอกรหัสนั้น โดยค่านี้คือคีย์ 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: Secure 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 ไมโครเกตเวย์เป็นไคลเอ็นต์ 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 ไม่ได้สร้างในคอนเทนเนอร์ Edge Microgateway Docker โดยค่าเริ่มต้น สิ่งที่ต้องการทำให้สำเร็จ คุณต้องสร้างอิมเมจ 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 แบบ Northbound ช่วยให้ลูกค้าสามารถใช้ HTTPS เมื่อเรียก API ไปยัง Edge Microgateway ตัวอย่างด้านล่างใช้ใบรับรองที่ลงนามด้วยตนเอง

    1. ขั้นตอนการตั้งค่า Intital

    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-Aware, ผลิตภัณฑ์ 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. แก้ไขข้อความ 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-encode ไฟล์การกำหนดค่า 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 ที่กำหนดเอง (ตามความจำเป็นในกรณี แบบ Self-signed)

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

    1. เรียกใช้คำสั่ง cURL ต่อไปนี้เพื่อทดสอบการตั้งค่า สิ่งที่ใช้แทน เส้นทางฐานและคีย์ 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 และแอปพลิเคชันเป้าหมายแบ็กเอนด์ ตัวอย่างด้านล่างใช้ ใบรับรองที่ลงชื่อด้วยตนเอง

    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. สร้างพร็อกซีที่รับรู้ Microgateway ของ Edge ด้วยการตั้งค่าเหล่านี้ สำหรับข้อมูลเพิ่มเติม โปรดดูสร้างพร็อกซี Edge Microgateway-Aware API ใน Edge

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

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

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

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

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

      vi $HOME/.edgemicro/myorg-test-config.yaml
      
    2. แก้ไขข้อความ 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 ต่อไปนี้เพื่อทดสอบการตั้งค่า สิ่งที่ใช้แทน เส้นทางพื้นฐานที่ใช้ในพร็อกซีที่รับรู้ถึงไมโครเกตเวย์และ คีย์ 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 ต่อไปนี้ สิ่งที่ใช้แทน เส้นทางฐานและคีย์ 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 โดยเขียน custom ปลั๊กอินต่างๆ ปลั๊กอินที่กำหนดเองช่วยให้คุณโต้ตอบกับคำขอแบบเป็นโปรแกรมได้ และการตอบสนองที่ไหลผ่านไมโครเกตเวย์

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

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