Skip to content

NimTechnology

Trình bày các công nghệ CLOUD một cách dễ hiểu.

  • Kubernetes & Container
    • Docker
    • Kubernetes
      • Gateway API
      • Ingress
      • Pod
    • Helm Chart
    • OAuth2 Proxy
    • Isito-EnvoyFilter
    • Apache Kafka
      • Kafka
      • Kafka Connect
      • Lenses
    • Vault
    • Longhorn – Storage
    • VictoriaMetrics
    • MetalLB
    • Kong Gateway
  • CI/CD
    • ArgoCD
    • ArgoWorkflows
    • Argo Events
    • Spinnaker
    • Jenkins
    • Harbor
    • TeamCity
    • Git
      • Bitbucket
  • Coding
    • DevSecOps
    • Terraform
      • GCP – Google Cloud
      • AWS – Amazon Web Service
      • Azure Cloud
    • Golang
    • Laravel
    • Python
    • Jquery & JavaScript
    • Selenium
  • Log, Monitor & Tracing
    • DataDog
    • Prometheus
    • Grafana
    • ELK
      • Kibana
      • Logstash
  • BareMetal
    • NextCloud
  • Toggle search form

[Kong Gateway] Guide line migrate from Kong Gatway legacy to modern one

Posted on August 16, 2026August 16, 2026 By nim No Comments on [Kong Gateway] Guide line migrate from Kong Gatway legacy to modern one

Tài liệu ghi lại toàn bộ quy trình nâng cấp stack Kong Gateway từ phiên bản cũ (Kong 3.2.2 + Postgres 11 + Konga UI) lên kiến trúc chuẩn mới (Kong 3.8.0 + Postgres 15 + Kong Manager OSS UI + Basic Auth), kèm theo kiến trúc bảo vệ backend dịch vụ (e.g. WordPress/Elearning).

Contents

Toggle
  • 1. Sơ đồ Kiến trúc Hệ thống (Mermaid)
    • 1.1. So sánh Kiến trúc Cũ vs Mới
    • 1.2. Luồng Bảo vệ Dịch vụ Backend (Elearning / WordPress) chống Scan & DDoS
  • 2. Bảng So sánh Thành phần
  • 3. Quy trình Thực hiện Chi tiết
    • Bước 1: Backup Toàn bộ Dữ liệu Cũ
    • Bước 2: Nâng cấp Kong Gateway lên 3.8.0 & Thay thế Konga
      • 2.1. Dừng và xóa container Konga cũ
      • 2.2. Chạy Kong Migrations lên 3.8
      • 2.3. Dừng Kong cũ và khởi chạy Kong 3.8 với Kong Manager OSS
    • Bước 3: Cấu hình Route & Native Basic Auth cho Web UI
      • 3.1. Cập nhật Upstream và Route Web UI
      • 3.2. Tạo Service và Route cho Admin API (/api)
      • 3.3. Tạo Consumer và Bật Plugin Basic Auth
    • Bước 4: Nâng cấp Database từ Postgres 11 lên Postgres 15
      • 4.1. Dừng Kong & Postgres 11, backup thư mục data
      • 4.2. Khởi chạy Postgres 15
      • 4.3. Restore dữ liệu vào Postgres 15
    • Bước 5: Cấu hình Bảo vệ Dịch vụ Backend (Elearning / WordPress)
  • 4. Kiểm tra và Nghiệm thu

1. Sơ đồ Kiến trúc Hệ thống (Mermaid)

1.1. So sánh Kiến trúc Cũ vs Mới

graph TB
    subgraph Architecture_Old ["Kiến trúc Cũ (Legacy)"]
        UserOld[User / Browser] -->|Port 1337 / Không Auth chuẩn| KongaOld[Konga UI 0.14.9]
        KongaOld -->|Admin API 8001| KongOld[Kong Gateway 3.2.2]
        KongOld -->|Port 5432| PG11[(PostgreSQL 11-alpine)]
    end

    subgraph Architecture_New ["Kiến trúc Mới (Standard OSS 3.8.0)"]
        UserNew[User / Browser] -->|HTTPS 443 api-gateway.nimtechnology.com| KongNew[Kong Gateway 3.8.0]
        
        subgraph SecurityLayer ["Bảo vệ Lớp Gateway (Basic Auth Plugin)"]
            AuthCheck{Đúng user/pass?}
            AuthCheck -->|No| R401[401 Unauthorized]
            AuthCheck -->|Yes| RouteProxy[Proxy Traffic]
        end
        
        KongNew --> AuthCheck
        RouteProxy -->|GET /| KM_UI[Kong Manager OSS UI :8002]
        RouteProxy -->|GET /api/*| AdminAPI[Kong Admin API :8001]
        
        KongNew -->|Port 5432| PG15[(PostgreSQL 15-alpine)]
    end

1.2. Luồng Bảo vệ Dịch vụ Backend (Elearning / WordPress) chống Scan & DDoS

flowchart TD
    ClientReq[Client / Bot Request] -->|HTTPS| KongGW[Kong Gateway 3.8.0]

    subgraph Kong_Inspection ["Kong Gateway Inspection & Protection"]
        GW_CheckBot{Bot / Scanner UA?}
        GW_CheckBot -->|Yes - sqlmap, curl bot, etc.| BlockBot[403 Forbidden by bot-detection]
        
        GW_CheckBot -->|No| MatchRoute{Match Path?}
        
        MatchRoute -->|/xmlrpc.php| TerminateXML[403 Forbidden by request-termination]
        
        MatchRoute -->|/wp-login.php| LoginRate{Rate Limit > 5 req/min?}
        LoginRate -->|Yes| DropLogin[429 Too Many Requests]
        LoginRate -->|No| AllowLogin[Forward to Backend]
        
        MatchRoute -->|/* General Path| GlobalRate{Rate Limit > 5/s or 60/min?}
        GlobalRate -->|Yes| DropGlobal[429 Too Many Requests]
        GlobalRate -->|No| AllowGlobal[Forward to Backend]
    end

    subgraph Backend_Infrastructure ["Host 192.168.101.35 (Protected)"]
        AllowLogin --> UpstreamElearning[upstream-elearning :8080]
        AllowGlobal --> UpstreamElearning
        UpstreamElearning --> NginxWP[WordPress Nginx / Apache]
        NginxWP --> MariaDB[(MariaDB Safe from OOM/Crash)]
    end

2. Bảng So sánh Thành phần

Thành phầnCũMới
Kong Gatewaykong:3.2.2kong:3.8 (3.8.0)
Databasepostgres:11-alpinepostgres:15-alpine
Giao diện Web UIkonga:latest (Port 1337)Kong Manager OSS chính chủ (Port 8002)
Bảo mật Web UILogin form của KongaNative Kong basic-auth plugin trên domain
Bảo vệ BackendKhông cóbot-detection, rate-limiting, request-termination

3. Quy trình Thực hiện Chi tiết

Bước 1: Backup Toàn bộ Dữ liệu Cũ

Trước khi thực hiện, tạo bản dump database:

# Dump toàn bộ DB từ container Postgres cũ
docker exec kong-database pg_dumpall -U kong > /home/nim/kong_pg11_backup.sql

Bước 2: Nâng cấp Kong Gateway lên 3.8.0 & Thay thế Konga

2.1. Dừng và xóa container Konga cũ

docker stop konga konga-prepare 2>/dev/null || true
docker rm konga konga-prepare 2>/dev/null || true

2.2. Chạy Kong Migrations lên 3.8

docker run --rm \
  --network kong-net \
  -e "KONG_DATABASE=postgres" \
  -e "KONG_PG_HOST=kong-database" \
  -e "KONG_PG_USER=kong" \
  -e "KONG_PG_PASSWORD=***" \
  kong:3.8 kong migrations up

docker run --rm \
  --network kong-net \
  -e "KONG_DATABASE=postgres" \
  -e "KONG_PG_HOST=kong-database" \
  -e "KONG_PG_USER=kong" \
  -e "KONG_PG_PASSWORD=***" \
  kong:3.8 kong migrations finish

2.3. Dừng Kong cũ và khởi chạy Kong 3.8 với Kong Manager OSS

docker stop kong && docker rm kong

docker run -d --name kong \
  --network kong-net \
  --ip 172.1.1.40 \
  --restart unless-stopped \
  -e "KONG_DATABASE=postgres" \
  -e "KONG_PG_HOST=kong-database" \
  -e "KONG_PG_USER=kong" \
  -e "KONG_PG_PASSWORD=***" \
  -e "KONG_PROXY_ACCESS_LOG=/dev/stdout" \
  -e "KONG_ADMIN_ACCESS_LOG=/dev/stdout" \
  -e "KONG_PROXY_ERROR_LOG=/dev/stderr" \
  -e "KONG_ADMIN_ERROR_LOG=/dev/stderr" \
  -e "KONG_ADMIN_LISTEN=0.0.0.0:8001, 0.0.0.0:8444 ssl" \
  -e "KONG_ADMIN_GUI_LISTEN=0.0.0.0:8002" \
  -e "KONG_ADMIN_GUI_URL=https://api-gateway.nimtechnology.com" \
  -e "KONG_ADMIN_GUI_API_URL=https://api-gateway.nimtechnology.com/api" \
  -p 80:8000 \
  -p 443:8443 \
  -p 8001:8001 \
  -p 8002:8002 \
  kong:3.8

Bước 3: Cấu hình Route & Native Basic Auth cho Web UI

Vì Kong Manager OSS không tích hợp sẵn form login RBAC (tính năng Enterprise), bảo vệ UI khi public ra Internet bằng plugin basic-auth ngay trên proxy route của Kong.

3.1. Cập nhật Upstream và Route Web UI

# 1. Xóa target cũ (Konga 1337) và thêm target mới (Kong Manager 8002)
TARGET_ID=$(curl -s http://127.0.0.1:8001/upstreams/upstream-konga/targets | jq -r ".data[0].id")
curl -X DELETE http://127.0.0.1:8001/upstreams/upstream-konga/targets/$TARGET_ID

curl -i -X POST http://127.0.0.1:8001/upstreams/upstream-konga/targets \
  --data "target=192.168.101.9:8002" \
  --data "weight=100"

# 2. Cập nhật route-konga giữ nguyên path (strip_path=false) để load assets UI
curl -i -X PATCH http://127.0.0.1:8001/routes/route-konga \
  --data "strip_path=false" \
  --data "protocols[]=http" \
  --data "protocols[]=https"

3.2. Tạo Service và Route cho Admin API (/api)

# Tạo service trỏ về Admin API
curl -i -X POST http://127.0.0.1:8001/services \
  --data "name=svc-admin-api" \
  --data "url=http://192.168.101.9:8001"

# Tạo route /api trên domain
curl -i -X POST http://127.0.0.1:8001/services/svc-admin-api/routes \
  --data "name=route-admin-api" \
  --data "hosts[]=api-gateway.nimtechnology.com" \
  --data "paths[]=/api" \
  --data "strip_path=true" \
  --data "protocols[]=http" \
  --data "protocols[]=https"

3.3. Tạo Consumer và Bật Plugin Basic Auth

# 1. Tạo consumer admin (nếu chưa có)
curl -i -X POST http://127.0.0.1:8001/consumers \
  --data "username=admin"

# 2. Đặt mật khẩu Basic Auth
curl -i -X POST http://127.0.0.1:8001/consumers/admin/basic-auth \
  --data "username=admin" \
  --data "password=<YOUR_SECURE_PASSWORD>"

# 3. Gán plugin basic-auth lên route UI và route API
curl -i -X POST http://127.0.0.1:8001/routes/route-konga/plugins \
  --data "name=basic-auth" \
  --data "config.hide_credentials=false"

curl -i -X POST http://127.0.0.1:8001/routes/route-admin-api/plugins \
  --data "name=basic-auth" \
  --data "config.hide_credentials=false"

Bước 4: Nâng cấp Database từ Postgres 11 lên Postgres 15

4.1. Dừng Kong & Postgres 11, backup thư mục data

docker stop kong kong-database
docker rm kong-database

mv /home/docker/postgres-kongapi /home/docker/postgres-kongapi-pg11-backup
mkdir -p /home/docker/postgres-kongapi
chown -R 70:70 /home/docker/postgres-kongapi

4.2. Khởi chạy Postgres 15

docker run -d --name kong-database \
  --network kong-net \
  --ip 172.1.1.2 \
  --restart unless-stopped \
  -e "POSTGRES_USER=kong" \
  -e "POSTGRES_PASSWORD=***" \
  -e "POSTGRES_DB=kong" \
  -v /home/docker/postgres-kongapi:/var/lib/postgresql/data \
  -p 5432:5432 \
  postgres:15-alpine

4.3. Restore dữ liệu vào Postgres 15

# Chờ Postgres 15 sẵn sàng
docker exec kong-database pg_isready -U kong

# Restore dump
docker exec -i kong-database psql -U kong -d postgres < /home/nim/kong_pg11_backup.sql

# Khởi động lại Kong
docker start kong

Bước 5: Cấu hình Bảo vệ Dịch vụ Backend (Elearning / WordPress)

# 1. Chặn đứng /xmlrpc.php ngay tại Gateway
curl -i -X POST http://127.0.0.1:8001/services/svc-elearning/routes \
  --data "name=route-elearning-xmlrpc" \
  --data "hosts[]=e-learning.nimtechnology.com" \
  --data "paths[]=/xmlrpc.php"

curl -i -X POST http://127.0.0.1:8001/routes/route-elearning-xmlrpc/plugins \
  --data "name=request-termination" \
  --data "config.status_code=403" \
  --data "config.message=XMLRPC disabled for security"

# 2. Rate limit chặt chẽ cho /wp-login.php (5 req/phút)
curl -i -X POST http://127.0.0.1:8001/services/svc-elearning/routes \
  --data "name=route-elearning-login" \
  --data "hosts[]=e-learning.nimtechnology.com" \
  --data "paths[]=/wp-login.php"

curl -i -X POST http://127.0.0.1:8001/routes/route-elearning-login/plugins \
  --data "name=rate-limiting" \
  --data "config.minute=5" \
  --data "config.policy=local" \
  --data "config.limit_by=ip"

# 3. Chống bot scanner & Rate limiting toàn service elearning
curl -i -X POST http://127.0.0.1:8001/services/svc-elearning/plugins \
  --data "name=bot-detection"

curl -i -X POST http://127.0.0.1:8001/services/svc-elearning/plugins \
  --data "name=rate-limiting" \
  --data "config.second=5" \
  --data "config.minute=60" \
  --data "config.policy=local" \
  --data "config.limit_by=ip"

4. Kiểm tra và Nghiệm thu

# 1. Kiểm tra trạng thái Kong & Database
curl -s http://127.0.0.1:8001/status

# 2. Kiểm tra truy cập không có auth (phải trả 401 Unauthorized)
curl -I -k "https://127.0.0.1/" -H "Host: api-gateway.nimtechnology.com"

# 3. Kiểm tra truy cập có Basic Auth (phải trả 200 OK)
curl -I -k -u admin:<YOUR_PASSWORD> "https://127.0.0.1/" -H "Host: api-gateway.nimtechnology.com"

# 4. Kiểm tra chặn xmlrpc trên elearning (phải trả 403 Forbidden)
curl -i -k "https://127.0.0.1/xmlrpc.php" -H "Host: e-learning.nimtechnology.com"

Kong Gateway

Post navigation

Previous Post: Komodo manages many Docker containers on many servers

More Related Articles

[Kong Gateway] WebSocket connection failed Kong Gateway

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

Tham Gia Group DevOps nhé!
Để Nim có nhiều động lực ra nhiều bài viết.
Để nhận được những thông báo mới nhất.

Recent Posts

  • [Kong Gateway] Guide line migrate from Kong Gatway legacy to modern one August 16, 2026
  • Komodo manages many Docker containers on many servers July 27, 2026
  • [Crunchy] Install PostgreSQL on the k8s cluster via Crunchy Postgres. July 27, 2026
  • [podman] Run a Docker container without using Docker July 15, 2026
  • Transform a Google Drive to S3 AWS June 12, 2026

Archives

  • August 2026
  • July 2026
  • June 2026
  • April 2026
  • March 2026
  • February 2026
  • January 2026
  • December 2025
  • November 2025
  • October 2025
  • September 2025
  • August 2025
  • July 2025
  • June 2025
  • May 2025
  • April 2025
  • March 2025
  • February 2025
  • January 2025
  • December 2024
  • November 2024
  • October 2024
  • September 2024
  • August 2024
  • July 2024
  • June 2024
  • May 2024
  • April 2024
  • March 2024
  • February 2024
  • January 2024
  • December 2023
  • November 2023
  • October 2023
  • September 2023
  • August 2023
  • July 2023
  • June 2023
  • May 2023
  • April 2023
  • March 2023
  • February 2023
  • January 2023
  • December 2022
  • November 2022
  • October 2022
  • September 2022
  • August 2022
  • July 2022
  • June 2022
  • May 2022
  • April 2022
  • March 2022
  • February 2022
  • January 2022
  • December 2021
  • November 2021
  • October 2021
  • September 2021
  • August 2021
  • July 2021
  • June 2021

Categories

  • AI
    • OpenClaw
  • BareMetal
    • NextCloud
  • CI/CD
    • Argo Events
    • ArgoCD
    • ArgoWorkflows
    • Git
      • Bitbucket
    • Harbor
    • Jenkins
    • Spinnaker
    • TeamCity
  • Coding
    • DevSecOps
    • Golang
    • Jquery & JavaScript
    • Laravel
    • NextJS 14 & ReactJS & Type Script
    • Python
    • Selenium
    • Terraform
      • AWS – Amazon Web Service
      • Azure Cloud
      • GCP – Google Cloud
  • Kubernetes & Container
    • Apache Kafka
      • Kafka
      • Kafka Connect
      • Lenses
    • Docker
    • Helm Chart
    • Isito-EnvoyFilter
    • Kong Gateway
    • Kubernetes
      • Gateway API
      • Ingress
      • Pod
    • Longhorn – Storage
    • MetalLB
    • OAuth2 Proxy
    • Vault
    • VictoriaMetrics
  • Log, Monitor & Tracing
    • DataDog
    • ELK
      • Kibana
      • Logstash
    • Fluent
    • Grafana
    • Prometheus
  • Uncategorized
  • Admin

Copyright © 2026 NimTechnology.

Powered by PressBook Blog WordPress theme