การใช้ 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 เข้ารหัสไฟล์การกําหนดค่า 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 โดยค่าเริ่มต้นคอนเทนเนอร์จะเปลี่ยนเส้นทาง tdtd และเอาต์พุตข้อผิดพลาดไปยังไฟล์ในคอนเทนเนอร์นั้นในตําแหน่ง: ${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 ที่ถูกต้อง

    ใน 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: Secure 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 เมื่อคุณเรียกใช้คอนเทนเนอร์

    ตั้งค่าพารามิเตอร์นี้เป็นเส้นทางไปยังไฟล์ที่มีใบรับรองที่เชื่อถือได้อย่างน้อยหนึ่งรายการในรูปแบบ 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 ที่แนบทางทิศเหนือทําให้ไคลเอ็นต์สามารถใช้ HTTPS เมื่อเรียก API ไปยัง Edge Microgateway ตัวอย่างด้านล่างใช้ใบรับรองแบบ Self-signed

    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 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. แก้ไขกลุ่มข้อความ 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 ที่กําหนดเอง (ตามที่จําเป็นสําหรับใบรับรองแบบ Self-signed)

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

    1. เรียกใช้คําสั่ง cURL ต่อไปนี้เพื่อทดสอบการตั้งค่า นําฐานของคีย์และ API มาแทนที่ในคําสั่ง ตัวอย่างต่อไปนี้จะถือว่าคุณอยู่ในไดเรกทอรีที่ rootca.pem อยู่และพร็อกซีที่คุณสร้างมี Basepath /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 เพื่อรับทรัพยากร Dependency

    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. แก้ไขกลุ่มข้อความ 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 ต่อไปนี้เพื่อทดสอบการตั้งค่า แทนที่ Basepath ที่คุณใช้ในพร็อกซีแบบ 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
      

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

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

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

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

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

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

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

    1. หยุด Microgateway ของ Edge:

      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 [ระบบไฟล์ที่ใช้ร่วมกัน]

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

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

    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. บีบอัดทั้งโฟลเดอร์ plugins ในโฟลเดอร์ plugin ดังนี้

      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 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. เริ่มไมโครเวย์

    และสุดท้าย คุณต้องเริ่มไมโครคอนโทรลเลอร์ในคอนเทนเนอร์

    1. เรียกใช้คําสั่งต่อไปนี้ให้กับ 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`
    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!