Kubernetes Üzerinde Apache APISIX Kurulumu (Helm + Etcd + Dashboard)

API Gateway çözümleri arasında Apache APISIX, modern, hafif, eklenti tabanlı ve yüksek performanslı yapısıyla öne çıkıyor. Özellikle microservice mimarilerde, trafik yönetimi, routing, authentication, rate-limit, observability gibi konularda çok güçlü bir altyapı sunuyor.

Bu yazıda, Kubernetes üzerine Helm chart kullanarak APISIX + Etcd kurulumunu, APISIX Dashboard’un eklenmesini ve ardından Route, Upstream, Service örneklerinin nasıl tanımlanacağını adım adım göstereceğim.


🎯 Neler Kuruyoruz?

  • APISIX Gateway
  • Etcd (APISIX için KV-store)
  • APISIX Dashboard
  • Custom Route, Upstream ve Service konfigürasyonları

Tüm kurulumları Helm üzerinden gerçekleştireceğiz.


🚀 APISIX Helm Repo Ekleme

Öncelikle APISIX Helm deposunu ekleyelim:

helm repo add apisix https://charts.apiseven.com

Depoyu güncelleyelim:

helm repo update


📦 Namespace Oluşturma

APISIX bileşenlerini izole bir namespace altında çalıştırmak her zaman daha sağlıklı olur:

kubectl create namespace apisix


🧩 APISIX + Etcd Kurulumu

APISIX kurarken bir values.yaml dosyası üzerinden konfigürasyon geçebilirsiniz.

Kurulum komutu:

helm install apisix apisix/apisix -n apisix -f values.yaml

etcd:
  enabled: true
  replicaCount: 3
  service:
    type: ClusterIP
  image:
    registry: docker.io
    repository: bitnamilegacy/etcd
    tag: latest

admin:
  credentials:
    admin: d98af9222e22e238acb70f49c33b132
    viewer: a1390b2bed223232323232e3439a7e7d05

    ## -- The APISIX Helm chart supports storing user credentials in a secret.
    ## The secret needs to contain two keys, admin and viewer, with their respective values set.
    #secretName: ""
    ## -- Name of the admin role key in the secret, overrides the default key name "admin"
    #secretAdminKey: ""
    ## -- Name of the viewer role key in the secret, overrides the default key name "viewer"
    #secretViewerKey: ""

gateway:
  type: NodePort
  http:
    enabled: true
    servicePort: 9080
    nodePort: 30080
  https:
    enabled: true
    servicePort: 9443
    nodePort: 30443

Bu işlem sonucunda:

  • APISIX Gateway
  • Etcd
  • APISIX Ingress Controller (eğer aktifse)
  • APISIX plugins

gibi bileşenler yüklenir.


📊 APISIX Dashboard Kurulumu

Dashboard, API gateway yönetimini GUI üzerinden yapabilmeniz için idealdir.

helm install apisix-dashboard apisix/apisix-dashboard --namespace apisix -f dashboard-values.yaml

Dashboard kullanıcı bilgisi örneği:

config:
  authentication:
    users:
      - username: admin
        password: admin


⚙️ APISIX Üzerinde Route, Upstream ve Service Tanımlama

Aşağıdaki örnekler, Kubernetes üzerinde çalışan bir servis için APISIX üzerinden yönlendirme yapmayı göstermektedir.


🛣️ Route Örneği

Aşağıdaki Route tanımı, /YaMiSoFt.Api/* pattern’ine gelen tüm istekleri APISIX içerisindeki ilgili servise yönlendirir.

{
  "uri": "/YaMiSoFt.Api/*",
  "name": "api-1",
  "methods": [
    "GET",
    "POST",
    "PUT",
    "DELETE",
    "PATCH",
    "HEAD",
    "OPTIONS",
    "CONNECT",
    "TRACE",
    "PURGE"
  ],
  "service_id": "584508352566920278",
  "status": 1
}


🔁 Upstream Tanımı

Kubernetes servisinizin cluster içindeki adresini APISIX’e Upstream olarak ekliyoruz:

{
  "nodes": [
    {
      "host": "api-1.yamisoft.svc",
      "port": 80,
      "weight": 1
    }
  ],
  "timeout": {
    "connect": 6,
    "send": 6,
    "read": 6
  },
  "type": "roundrobin",
  "scheme": "http",
  "pass_host": "pass",
  "name": "api-1",
  "keepalive_pool": {
    "idle_timeout": 60,
    "requests": 1000,
    "size": 320
  }
}

Bu upstream ne sağlar?

  • Kubernetes içindeki servise load-balancer mantığı ile istek yönlendirir.
  • Keepalive pool değerleri performansı artırır.
  • Timeout değerleri API stabilitesini garanti eder.

🔧 Service Tanımı

Route → Service → Upstream zincirinde Service ara katmandır.
Ek olarak plugin ekleyerek istek/cevap manipülasyonu yapılabilir.

{
  "name": "api-1",
  "upstream_id": "584507455069750358",
  "plugins": {
    "proxy-rewrite": {
      "_meta": {
        "disable": false
      },
      "headers": {
        "set": {
          "X-Api-Engine": "apisix",
          "X-Api-Version": "1"
        }
      },
      "regex_uri": [
        "^/YaMiSoFt.Api/(.*)",
        "/$1"
      ]
    },
    "response-rewrite": {
      "headers": {
        "remove": [
          "Server"
        ]
      }
    }
  }
}

Bu ne işe yarıyor?

  • proxy-rewrite
    • İstek URI’sini yeniden yazıyor
      Örn: /YaMiSoFt.Api/products/products
    • Custom header ekleyerek servisler arasında tracing kolaylaşıyor.
  • response-rewrite
    • Backend tarafından dönen Server header’ını kaldırır.
      → Güvenlik açısından tavsiye edilir.

🎉 Sonuç: Production-Ready Modern API Gateway

Bu kurulumla beraber Kubernetes ortamınızda:

✔ APISIX Gateway
✔ Etcd
✔ Dashboard
✔ Route / Upstream / Service
✔ Header rewrite
✔ Regex URI rewrite

tam anlamıyla çalışan bir API Gateway elde etmiş oluyorsunuz.

APISIX, performans, plugin çeşitliliği, routing esnekliği ve dashboard arabirimi ile modern microservice mimarilerinde vazgeçilmez bir bileşen hâline geliyor.