KONG API шлюз на GKE
Всеосяжний посібник з налаштування кластера GKE за допомогою Terraform, встановлення Kong API Gateway та розгортання додатка з аутентифікацією OIDC.
Kong API широко використовується, оскільки він пропонує масштабоване та гнучке рішення для управління і забезпечення API. Ось кілька причин, чому люди вибирають Kong для керування своїми API:
Масштабованість: Kong розроблений для роботи з великими середовищами. Він здатний обробляти мільйони запитів за секунду, що робить його ідеальним для підприємств чи стартапів із швидко зростаючим трафіком.
Відкритий код і розширюваність: Kong є відкритим програмним забезпеченням, що означає, що ви можете використовувати його безкоштовно і налаштовувати під свої потреби. До того ж, у нього є багата екосистема плагінів, що дозволяє розширювати його функціональність для таких задач, як аутентифікація, лімітування запитів, ведення журналів і моніторинг.
API шлюз: Kong працює як API шлюз, надаючи єдину точку входу для ваших API-сервісів. Це допомагає з маршрутизацією, балансуванням навантаження та виявленням сервісів, спрощуючи архітектуру.
Безпека: Kong поставляється з вбудованими функціями безпеки, такими як аутентифікація, авторизація та шифрування.
Він підтримує OAuth2, JWT та інші стандарти безпеки, що дозволяє легко захистити ваші API.
Дружелюбність до мікросервісів: Якщо ви працюєте з мікросервісами, Kong є відмінним вибором, оскільки підтримує виявлення сервісів, динамічну маршрутизацію та безшовну інтеграцію з контейнеризованими додатками (наприклад, Docker, Kubernetes).
Моніторинг і аналітика: Kong має вбудовані можливості моніторингу та логування, а також інтегрується з інструментами третьої сторони, такими як Prometheus, Grafana і Datadog, для глибшого аналізу продуктивності API.
Мультихмарні та гібридні розгортання: Kong добре працює як у локальних, так і в хмарних середовищах, дозволяючи розгортати його в будь-якому місці, де знаходиться ваша інфраструктура.
Легкість у використанні: Хоча він потужний, інтерфейс Kong (особливо з Kong Manager і Kong CLI) є зручним, і вам легко почати використовувати базову функціональність.
Підтримка спільноти та підприємств: Існує велика та активна спільнота, а також можливість використовувати Kong Enterprise для додаткової підтримки та функцій, таких як просунута аналітика та корпоративний рівень безпеки.
Попередні вимоги:
- Обліковий запис Google Cloud
- Встановлений Terraform
- Налаштований gcloud CLI
- Встановлений Helm
- Kubernetes CLI (kubectl)
Ключові кроки:
- Замініть заповнювачі для ID проекту, деталей клієнта OIDC
- Переконайтеся, що у вас встановлені Terraform, gcloud CLI і kubectl
- Налаштуйте ваш постачальник ідентифікації (наприклад, Auth0, Keycloak, Google) для OIDC
Примітка: Вам потрібно буде налаштувати деталі вашого конкретного постачальника OIDC в конфігурації Kong.
# Налаштування постачальника
provider "google" {
project = var.project_id
region = var.region
}
# Увімкнення необхідних API
resource "google_project_service" "services" {
for_each = toset([
"container.googleapis.com",
"compute.googleapis.com",
"cloudresourcemanager.googleapis.com"
])
service = each.key
disable_on_destroy = false
}
# Мережа VPC
resource "google_compute_network" "vpc_network" {
name = "kong-network"
auto_create_subnetworks = false
}
resource "google_compute_subnetwork" "subnet" {
name = "kong-subnet"
ip_cidr_range = "10.0.0.0/24"
region = var.region
network = google_compute_network.vpc_network.id
}
# GKE Кластер
resource "google_container_cluster" "primary" {
name = "kong-cluster"
location = var.region
network = google_compute_network.vpc_network.name
subnetwork = google_compute_subnetwork.subnet.name
remove_default_node_pool = true
initial_node_count = 1
workload_identity_config {
workload_pool = "${var.project_id}.svc.id.goog"
}
}
# Пул вузлів
resource "google_container_node_pool" "primary_nodes" {
name = "kong-node-pool"
location = var.region
cluster = google_container_cluster.primary.name
node_count = 3
node_config {
machine_type = "e2-medium"
oauth_scopes = [
"https://www.googleapis.com/auth/cloud-platform"
]
}
}
# Змінні
variable "project_id" {
description = "GCP Project ID"
type = string
}
variable "region" {
description = "GCP Region"
type = string
default = "us-central1"
}
# Значення Helm для Kong
apiVersion: v1
kind: Namespace
metadata:
name: kong-system
---
apiVersion: helm.sh/v2
kind: HelmRelease
metadata:
name: kong
namespace: kong-system
spec:
chart:
spec:
chart: kong
sourceRef:
kind: HelmRepository
name: kong
values:
env:
database: "off"
# Налаштування плагіна OIDC
plugins:
- name: oidc
config:
client_id: ${OIDC_CLIENT_ID}
client_secret: ${OIDC_CLIENT_SECRET}
discovery: https://your-identity-provider/.well-known/openid-configuration
introspection_endpoint: https://your-identity-provider/token/introspect
bearer_only: "yes"
# Приклад розгортання додатка
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: sample-app
namespace: default
spec:
replicas: 2
selector:
matchLabels:
app: sample-app
template:
metadata:
labels:
app: sample-app
spec:
containers:
- name: sample-app
image: nginx:latest
ports:
- containerPort: 80
## Kong Ingress з OIDC
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: sample-app-ingress
annotations:
konghq.com/plugins: oidc
spec:
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: sample-app
port:
number: 80
apiVersion: v1
kind: Service
metadata:
name: sample-app-service
namespace: default
labels:
app: sample-app
spec:
selector:
app: sample-app
ports:
- protocol: TCP
port: 80
targetPort: 80
type: ClusterIP
#!/bin/bash
# Встановіть GCP Project та Region
export PROJECT_ID="your-project-id"
export REGION="us-central1"
# Аутентифікація з GCP
gcloud auth login
gcloud config set project $PROJECT_ID
# Увімкніть Terraform
terraform init
terraform apply
# Налаштуйте kubectl
gcloud container clusters get-credentials kong-cluster \
--region $REGION \
--project $PROJECT_ID
# Встановіть Helm
helm repo add kong https://charts.konghq.com
helm repo update
# Налаштуйте змінні середовища OIDC
export OIDC_CLIENT_ID="your-client-id"
export OIDC_CLIENT_SECRET="your-client-secret"
# Розгорніть Kong та додаток
kubectl apply -f kong-deployment.yaml
# Перевірте розгортання
kubectl get pods -n kong-system
kubectl get ingress
Сподобалась стаття? Не соромтесь купити мені кави ☕ ваша підтримка дуже важлива!
Перекладено з: KONG API gateway on GKE