ACME
Get free TLS certificates from Let's Encrypt with the ACME plugin.
- series
- Kong Workshop
- episode
- ตอนที่ 18 จาก 20
- read
- อ่าน 3 นาที
Compose file
เราต้องเพิ่ม env ไปที่ kong service
KONG_LUA_SSL_TRUSTED_CERTIFICATE: system
ส่วนของ proxy ก็เพิ่ม port 8443 เข้าไปด้วย ไม่อย่างนั้น kong จะไม่ทำงานผ่าน ssl ให้เลย
KONG_PROXY_LISTEN: "0.0.0.0:8000, 0.0.0.0:8443 http2 ssl"
ส่วน port ก็ให้ binding แบบนี้
kong จำเป็นต้องเข้าถึง port 80 นะไม่งั้น ACME plugin จะทำ challenge ของ Let’s encrypt ไม่ได้
"0.0.0.0:80:8000/tcp""0.0.0.0:443:8443/tcp"
ดูแค่ service kong นะ
services: kong: container_name: kong image: "${KONG_DOCKER_TAG:-kong:latest}" user: "${KONG_USER:-kong}" environment: <<: *kong-env KONG_ADMIN_ACCESS_LOG: /dev/stdout KONG_ADMIN_ERROR_LOG: /dev/stderr KONG_PROXY_LISTEN: "0.0.0.0:8000, 0.0.0.0:8443 http2 ssl" KONG_ADMIN_LISTEN: "0.0.0.0:8001, 0.0.0.0:8444 ssl" KONG_ADMIN_GUI_LISTEN: "0.0.0.0:8002, 0.0.0.0:8445 ssl" KONG_PROXY_ACCESS_LOG: /dev/stdout KONG_PROXY_ERROR_LOG: /dev/stderr KONG_PREFIX: ${KONG_PREFIX:-/var/run/kong} KONG_DECLARATIVE_CONFIG: "/opt/kong/kong.yaml" KONG_LUA_SSL_TRUSTED_CERTIFICATE: system KONG_ADMIN_GUI_URL: "https://backend-tgo.dev-env-th.com/kong-manager-ui" KONG_ADMIN_GUI_API_URL: "https://backend-tgo.dev-env-th.com/kong-manager-api" KONG_ADMIN_GUI_PATH: "/kong-manager-ui" secrets: - kong_postgres_password networks: - kong-net ports: # The following two environment variables default to an insecure value (0.0.0.0) # according to the CIS Security test. # "${KONG_INBOUND_PROXY_LISTEN:-0.0.0.0}:80:8000/tcp" # "${KONG_INBOUND_SSL_PROXY_LISTEN:-0.0.0.0}:443:8443/tcp" # Making them mandatory but undefined, like so would be backwards-breaking: # - "${KONG_INBOUND_PROXY_LISTEN?Missing inbound proxy host}:8000:8000/tcp" # - "${KONG_INBOUND_SSL_PROXY_LISTEN?Missing inbound proxy ssl host}:8443:8443/tcp" # Alternative is deactivating check 5.13 in the security bench, if we consider Kong's own config to be enough security here
- "0.0.0.0:80:8000/tcp" - "0.0.0.0:443:8443/tcp" - "0.0.0.0:8001:8001/tcp" - "0.0.0.0:8444:8444/tcp" - "0.0.0.0:8002:8002/tcp" healthcheck: test: ["CMD", "kong", "health"] interval: 10s timeout: 10s retries: 10 restart: on-failure:5 read_only: true volumes: - kong_prefix_vol:${KONG_PREFIX:-/var/run/kong} - kong_tmp_vol:/tmp - ./config:/opt/kong security_opt: - no-new-privilegesแล้ว restart kong ด้วยนะ
Setup ACME Plugin


ใส่ domain ตามชอบ
แต่ห้ามใช้ wild card (*) นะ เช่น *.mydomain.com

เลือก kong นะตรงนี้

ต้อง tick ด้วย เพราจะใช้ Let’s encrypt

Setup Routes
ตัวอย่าง เราต้องการจะใช้ ssl กับ domain นี้
- backend-tgo.dev-env-th.com
เราต้อง เพ่ิม routes สองอันสำหรับ domain นี้
//.well-known/acme-challenge



เสร็จแล้ว
ทดลองสั่ง
curl http://localhost:8001/acme -d host=backend-tgo.dev-env-th.com -d test_http_challenge_flow=trueให้ลองสั่ง เพื่อให้ acme ไปสร้าง certificate
curl http://localhost:8001/acme -d host=backend-tgo.dev-env-th.comหรืออันนี้ก็ได้
curl https://backend-tgo.dev-env-th.com -kหรือไปเข้าเวปตรงๆที่ browser ก็ได้
ตัวอักษรในรูปตัวเล็ก ให้ right click แล้ว open in image in new tab ก็ได้นะ

