{"id":43390,"date":"2026-07-17T09:01:14","date_gmt":"2026-07-17T06:01:14","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/gke-ile-10-bolgede-tek-manifest-ile-api-dagitimi\/"},"modified":"2026-07-17T09:01:40","modified_gmt":"2026-07-17T06:01:40","slug":"gke-ile-10-bolgede-tek-manifest-ile-api-dagitimi","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/gke-ile-10-bolgede-tek-manifest-ile-api-dagitimi\/","title":{"rendered":"GKE ile 10 B\u00f6lgede Tek Manifest ile API Da\u011f\u0131t\u0131m\u0131"},"content":{"rendered":"<h2>GKE ile 10 B\u00f6lgede Tek Manifest ile API Da\u011f\u0131t\u0131m\u0131<\/h2>\n<p>GKE \u00fczerinde k\u00fcresel \u00f6l\u00e7ekte ger\u00e7ek zamanl\u0131 API \u00e7al\u0131\u015ft\u0131rmak ve manifest tekrarlar\u0131ndan kurtulmak m\u0131 istiyorsunuz? \u0130\u015fte ak\u0131ll\u0131 otomasyon y\u00f6ntemleri!<\/p>\n<p>G\u00fcn\u00fcm\u00fcz\u00fcn dijital d\u00fcnyas\u0131nda, milisaniyeler bile kullan\u0131c\u0131 deneyimini do\u011frudan etkilemektedir. \u00d6zellikle finans, oyun ve ger\u00e7ek zamanl\u0131 haberle\u015fme gibi sekt\u00f6rlerde, API (Uygulama Programlama Aray\u00fcz\u00fc) yan\u0131t s\u00fcrelerinin olabildi\u011fince d\u00fc\u015f\u00fck olmas\u0131 hayati \u00f6nem ta\u015f\u0131r. Bu gereksinimi kar\u015f\u0131laman\u0131n en etkili yolu, uygulamalar\u0131n\u0131z\u0131 kullan\u0131c\u0131lara co\u011frafi olarak en yak\u0131n noktalarda bar\u0131nd\u0131rmakt\u0131r. Google Kubernetes Engine (GKE), d\u00fcnya genelinde yay\u0131lm\u0131\u015f altyap\u0131s\u0131yla bu ihtiyaca m\u00fckemmel bir yan\u0131t sunar. Ancak, uygulaman\u0131z\u0131 10 farkl\u0131 k\u00fcresel b\u00f6lgede (region) \u00e7al\u0131\u015ft\u0131rmaya karar verdi\u011finizde kar\u015f\u0131n\u0131za b\u00fcy\u00fck bir engel \u00e7\u0131kar: Yap\u0131land\u0131rma karma\u015fas\u0131.<\/p>\n<p>Her b\u00f6lge i\u00e7in ayr\u0131 ayr\u0131 Kubernetes manifest (yap\u0131land\u0131rma dosyas\u0131) dosyalar\u0131 olu\u015fturmak, kopyalamak ve bunlar\u0131 g\u00fcncel tutmak tam bir operasyonel kabustur. &#8220;Configuration Drift&#8221; (Yap\u0131land\u0131rma Sapmas\u0131) ad\u0131 verilen bu durum, b\u00f6lgeler aras\u0131nda uyumsuzluklara ve beklenmedik kesintilere yol a\u00e7ar. Bu makalede, GKE \u00fczerinde 10 farkl\u0131 b\u00f6lgede ger\u00e7ek zamanl\u0131 bir API&#8217;yi, manifest dosyalar\u0131n\u0131z\u0131 hi\u00e7 kopyalamadan (DRY &#8211; Don&#8217;t Repeat Yourself ilkesine sad\u0131k kalarak) nas\u0131l ba\u015far\u0131yla da\u011f\u0131taca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m inceleyece\u011fiz.<\/p>\n<h2>K\u00fcresel \u00d6l\u00e7ekte API Da\u011f\u0131tman\u0131n Zorluklar\u0131 Nelerdir?<\/h2>\n<p>K\u00fcresel bir API da\u011f\u0131t\u0131m\u0131 planlarken, m\u00fchendislik ekiplerinin kar\u015f\u0131la\u015ft\u0131\u011f\u0131 ilk zorluk altyap\u0131 y\u00f6netiminin karma\u015f\u0131kl\u0131\u011f\u0131d\u0131r. 10 farkl\u0131 b\u00f6lgede (\u00f6rne\u011fin; Frankfurt, Tokyo, Iowa, Sidney, S\u00e3o Paulo ve di\u011ferleri) \u00e7al\u0131\u015fan GKE k\u00fcmeleriniz (clusters) oldu\u011funu hayal edin. Her k\u00fcmenin kendine has veritaban\u0131 ba\u011flant\u0131 dizesi (connection string), IP bloklar\u0131 ve \u00f6l\u00e7eklendirme politikalar\u0131 olacakt\u0131r.<\/p>\n<p>E\u011fer geleneksel y\u00f6ntemleri kullan\u0131rsan\u0131z, her b\u00f6lge i\u00e7in ayr\u0131 bir YAML dosyas\u0131 olu\u015fturman\u0131z gerekir. Bu durum \u015fu sorunlar\u0131 beraberinde getirir:<\/p>\n<ul>\n<li><strong>\u0130nsan Hatas\u0131 Riski:<\/strong> Bir ortam de\u011fi\u015fkenini (environment variable) g\u00fcncellerken 10 dosyadan birini atlaman\u0131z, o b\u00f6lgedeki uygulaman\u0131n \u00e7\u00f6kmesine neden olabilir.<\/li>\n<li><strong>S\u00fcr\u00fcm Kontrol\u00fc Zorlu\u011fu:<\/strong> Git ge\u00e7mi\u015finiz, ayn\u0131 de\u011fi\u015fikliklerin tekrarland\u0131\u011f\u0131 y\u00fczlerce sat\u0131rl\u0131k commit (g\u00f6nderim) mesajlar\u0131yla dolar.<\/li>\n<li><strong>Gecikme S\u00fcresi (Latency) Y\u00f6netimi:<\/strong> B\u00f6lgeler aras\u0131ndaki veri senkronizasyonu ve trafik y\u00f6nlendirmesi karma\u015f\u0131kla\u015f\u0131r.<\/li>\n<\/ul>\n<p>Bu zorluklar\u0131n \u00fcstesinden gelmek i\u00e7in modern bulut bili\u015fim mimarisi (cloud computing architecture) prensiplerini ve deklaratif (bildirimsel) altyap\u0131 ara\u00e7lar\u0131n\u0131 kullanmam\u0131z gerekir. Amac\u0131m\u0131z, tek bir ana \u015fablon (base template) tan\u0131mlamak ve b\u00f6lgelere \u00f6zel farkl\u0131l\u0131klar\u0131 bu \u015fablonun \u00fczerine dinamik olarak giydirmektir.<\/p>\n<h2>Temel Kavramlar: GitOps, Kustomize ve Helm Nedir?<\/h2>\n<p>S\u00fcreci otomatikle\u015ftirmek ve kod tekrarlar\u0131ndan ka\u00e7\u0131nmak i\u00e7in modern GitOps ara\u00e7lar\u0131 ve Kubernetes yerel yap\u0131land\u0131rma y\u00f6neticilerinden yararlanaca\u011f\u0131z. Bu ara\u00e7lar\u0131n rollerini anlamak, kuraca\u011f\u0131m\u0131z mimarinin temelini olu\u015fturur.<\/p>\n<table>\n<thead>\n<tr>\n<th>Ara\u00e7<\/th>\n<th>Temel Rol\u00fc<\/th>\n<th>\u00c7oklu B\u00f6lge Da\u011f\u0131t\u0131m\u0131ndaki Avantaj\u0131<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><strong>GitOps (ArgoCD)<\/strong><\/td>\n<td>Git deposunu tek do\u011fruluk kayna\u011f\u0131 (single source of truth) olarak kullan\u0131r.<\/td>\n<td>T\u00fcm k\u00fcmelerin durumunu Git ile otomatik olarak e\u015fitler.<\/td>\n<\/tr>\n<tr>\n<td><strong>Kustomize<\/strong><\/td>\n<td>\u015eablon kullanmadan (template-free) YAML dosyalar\u0131n\u0131 \u00f6zelle\u015ftirir.<\/td>\n<td>Base (taban) ve Overlay (katman) mant\u0131\u011f\u0131yla kod tekrar\u0131n\u0131 \u00f6nler.<\/td>\n<\/tr>\n<tr>\n<td><strong>Helm<\/strong><\/td>\n<td>Kubernetes i\u00e7in paket y\u00f6neticisidir.<\/td>\n<td>\u00dc\u00e7\u00fcnc\u00fc taraf uygulamalar\u0131 standartla\u015ft\u0131rmak i\u00e7in idealdir.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Kustomize, Kubernetes toplulu\u011fu taraf\u0131ndan geli\u015ftirilen ve <code>kubectl<\/code> i\u00e7erisine entegre edilmi\u015f bir ara\u00e7t\u0131r. Helm&#8217;den farkl\u0131 olarak, YAML dosyalar\u0131n\u0131z\u0131 karma\u015f\u0131k \u015fablon dilleriyle (Go templating) doldurmaz. Bunun yerine, saf Kubernetes manifestlerinizi al\u0131r ve \u00fczerlerine yama (patch) uygulayarak hedef b\u00f6lgeye uygun hale getirir. Bu makalede, kod tekrarlar\u0131n\u0131 \u00f6nlemek i\u00e7in ana silah\u0131m\u0131z Kustomize olacakt\u0131r.<\/p>\n<h2>Mimari Tasar\u0131m: 10 B\u00f6lgede Tek Merkezden Y\u00f6netim Nas\u0131l Kurulur?<\/h2>\n<p>10 b\u00f6lgeye yay\u0131lm\u0131\u015f bir API&#8217;nin trafi\u011fini y\u00f6netmek ve bu k\u00fcmeleri tek bir merkezden kontrol etmek i\u00e7in Google Cloud&#8217;un sundu\u011fu geli\u015fmi\u015f a\u011f \u00e7\u00f6z\u00fcmlerini kullanaca\u011f\u0131z. Mimarimizin merkezinde <strong>GKE Multi-Cluster Gateway<\/strong> yer alacakt\u0131r.<\/p>\n<p>Geleneksel mimarilerde, her b\u00f6lgedeki Kubernetes k\u00fcmesi i\u00e7in ayr\u0131 bir harici y\u00fck dengeleyici (external load balancer) olu\u015fturulur. Bu durum hem maliyeti art\u0131r\u0131r hem de DNS seviyesinde karma\u015f\u0131k co\u011frafi y\u00f6nlendirme kurallar\u0131 yazman\u0131z\u0131 gerektirir. GKE Multi-Cluster Gateway ise Google&#8217;\u0131n k\u00fcresel Anycast IP altyap\u0131s\u0131n\u0131 kullan\u0131r. D\u00fcnyan\u0131n neresinden gelirse gelsin, t\u00fcm kullan\u0131c\u0131lar tek bir IP adresine y\u00f6nlendirilir. Google a\u011f altyap\u0131s\u0131, kullan\u0131c\u0131n\u0131n trafi\u011fini otomatik olarak en d\u00fc\u015f\u00fck gecikme s\u00fcresine sahip ve sa\u011fl\u0131kl\u0131 \u00e7al\u0131\u015fan en yak\u0131n GKE k\u00fcmesine iletir.<\/p>\n<p>Bu mimariyi y\u00f6netmek i\u00e7in Git depolar\u0131m\u0131z\u0131 \u015fu \u015fekilde yap\u0131land\u0131raca\u011f\u0131z: Tek bir &#8220;uygulama&#8221; depomuz olacak. Bu depodaki de\u011fi\u015fiklikler, GitOps arac\u0131m\u0131z (\u00f6rne\u011fin ArgoCD) taraf\u0131ndan alg\u0131lanacak ve 10 farkl\u0131 GKE k\u00fcmesine ayn\u0131 anda, ancak her k\u00fcmenin kendi \u00f6zel parametreleriyle da\u011f\u0131t\u0131lacakt\u0131r.<\/p>\n<h2>Uygulamal\u0131 Rehber: Kustomize ile DRY \u0130lkesi Nas\u0131l Uygulan\u0131r?<\/h2>\n<p>\u015eimdi teoriyi prati\u011fe d\u00f6kelim. Projemizin klas\u00f6r yap\u0131s\u0131n\u0131 olu\u015fturarak i\u015fe ba\u015fl\u0131yoruz. Kustomize&#8217;\u0131n g\u00fcc\u00fc, ortak yap\u0131land\u0131rmalar\u0131 <code>base<\/code> klas\u00f6r\u00fcnde tutup, b\u00f6lgeye \u00f6zel de\u011fi\u015fiklikleri <code>overlays<\/code> alt\u0131nda tan\u0131mlamas\u0131ndan gelir.<\/p>\n<p>A\u015fa\u011f\u0131daki dizin yap\u0131s\u0131n\u0131 olu\u015fturun:<\/p>\n<div class=\"code-container\">\n<pre><code>\u251c\u2500\u2500 base\/\n\u2502   \u251c\u2500\u2500 deployment.yaml\n\u2502   \u251c\u2500\u2500 service.yaml\n\u2502   \u2514\u2500\u2500 kustomization.yaml\n\u2514\u2500\u2500 overlays\/\n    \u251c\u2500\u2500 europe-west3\/\n    \u2502   \u2514\u2500\u2500 kustomization.yaml\n    \u251c\u2500\u2500 us-central1\/\n    \u2502   \u2514\u2500\u2500 kustomization.yaml\n    \u2514\u2500\u2500 asia-east1\/\n        \u2514\u2500\u2500 kustomization.yaml<\/code><\/pre>\n<\/div>\n<p>\u0130lk olarak, t\u00fcm b\u00f6lgelerde ortak olacak temel API deployment (da\u011f\u0131t\u0131m) dosyam\u0131z\u0131 (<code>base\/deployment.yaml<\/code>) tan\u0131mlayal\u0131m:<\/p>\n<div class=\"code-container\">\n<pre><code>apiVersion: apps\/v1\nkind: Deployment\nmetadata:\n  name: realtime-api\nspec:\n  replicas: 3\n  selector:\n    matchLabels:\n      app: realtime-api\n  template:\n    metadata:\n      labels:\n        app: realtime-api\n    spec:\n      containers:\n      - name: api-container\n        image: gcr.io\/my-project\/realtime-api:v1.0.0\n        ports:\n        - containerPort: 8080\n        env:\n        - name: REGION\n          value: \"default\"\n        - name: DB_HOST\n          value: \"global-db-proxy\"<\/code><\/pre>\n<\/div>\n<p>\u015eimdi bu taban yap\u0131land\u0131rmay\u0131 Kustomize&#8217;a tan\u0131tmak i\u00e7in <code>base\/kustomization.yaml<\/code> dosyas\u0131n\u0131 olu\u015ftural\u0131m:<\/p>\n<div class=\"code-container\">\n<pre><code>resources:\n- deployment.yaml\n- service.yaml<\/code><\/pre>\n<\/div>\n<p>Buraya kadar her \u015fey standart. \u015eimdi sihirli k\u0131sma geliyoruz. Almanya (Frankfurt) b\u00f6lgesi (<code>europe-west3<\/code>) i\u00e7in hi\u00e7bir YAML dosyas\u0131n\u0131 kopyalamadan, sadece farkl\u0131 olan de\u011ferleri tan\u0131mlayaca\u011f\u0131z. <code>overlays\/europe-west3\/kustomization.yaml<\/code> dosyas\u0131n\u0131 \u015fu \u015fekilde d\u00fczenleyin:<\/p>\n<div class=\"code-container\">\n<pre><code>resources:\n- ..\/..\/base\n\npatches:\n- target:\n    kind: Deployment\n    name: realtime-api\n  patch: |-\n    - op: replace\n      path: \/spec\/replicas\n      value: 10\n    - op: replace\n      path: \/spec\/template\/spec\/containers\/0\/env\/0\/value\n      value: \"europe-west3\"\n    - op: replace\n      path: \/spec\/template\/spec\/containers\/0\/env\/1\/value\n      value: \"eu-db.internal\"<\/code><\/pre>\n<\/div>\n<p>Bu yap\u0131land\u0131rma sayesinde, Avrupa b\u00f6lgesindeki k\u00fcmemiz i\u00e7in replika say\u0131s\u0131 otomatik olarak 10&#8217;a \u00e7\u0131kar\u0131lacak, b\u00f6lge ad\u0131 ve veritaban\u0131 adresi o b\u00f6lgeye \u00f6zel olarak g\u00fcncellenecektir. Di\u011fer 9 b\u00f6lge i\u00e7in de benzer \u015fekilde sadece k\u00fc\u00e7\u00fck yama (patch) dosyalar\u0131 olu\u015fturarak manifest kirlili\u011finin tamamen \u00f6n\u00fcne ge\u00e7ebilirsiniz.<\/p>\n<h2>Ger\u00e7ek Zamanl\u0131 Trafik Y\u00f6netimi: Multi-Cluster Gateway Nas\u0131l Yap\u0131land\u0131r\u0131l\u0131r?<\/h2>\n<p>Manifestlerimizi haz\u0131rlad\u0131k ve b\u00f6lgelere \u00f6zel hale getirdik. Peki, k\u00fcresel kullan\u0131c\u0131 trafi\u011fini bu 10 b\u00f6lgeye nas\u0131l dinamik olarak da\u011f\u0131taca\u011f\u0131z? Google Cloud&#8217;un Multi-Cluster Gateway (\u00c7oklu K\u00fcme Ge\u00e7idi) \u00f6zelli\u011fini kullanarak bunu ger\u00e7ekle\u015ftirebiliriz.<\/p>\n<p>\u00d6ncelikle, k\u00fcresel y\u00fck dengeleyicimizi tan\u0131mlayan bir Gateway kayna\u011f\u0131 olu\u015fturmam\u0131z gerekiyor. Bu kaynak, t\u00fcm b\u00f6lgelerdeki GKE k\u00fcmelerimizin \u00f6n\u00fcnde tek bir giri\u015f kap\u0131s\u0131 olarak g\u00f6rev yapacakt\u0131r:<\/p>\n<div class=\"code-container\">\n<pre><code>apiVersion: gateway.networking.k8s.io\/v1\nkind: Gateway\nmetadata:\n  name: global-api-gateway\n  namespace: multi-cluster-gateways\n  annotations:\n    networking.gke.io\/cert-tracker: \"true\"\nspec:\n  gatewayClassName: gke-l7-global-external-managed-mc\n  listeners:\n  - name: https\n    protocol: HTTPS\n    port: 443\n    tls:\n      mode: Terminate\n      certificateRefs:\n      - name: api-global-cert<\/code><\/pre>\n<\/div>\n<p>Bu Gateway tan\u0131m\u0131, Google Cloud \u00fczerinde k\u00fcresel bir HTTPS y\u00fck dengeleyici olu\u015fturur. \u015eimdi, gelen istekleri hangi servislerimize y\u00f6nlendirece\u011fimizi belirleyen <code>HTTPRoute<\/code> kayna\u011f\u0131n\u0131 tan\u0131mlayal\u0131m:<\/p>\n<div class=\"code-container\">\n<pre><code>apiVersion: gateway.networking.k8s.io\/v1\nkind: HTTPRoute\nmetadata:\n  name: realtime-api-route\n  namespace: default\nspec:\n  parentRefs:\n  - group: gateway.networking.k8s.io\n    kind: Gateway\n    name: global-api-gateway\n    namespace: multi-cluster-gateways\n  rules:\n  - backendRefs:\n    - group: \"\"\n      kind: Service\n      name: realtime-api\n      port: 8080<\/code><\/pre>\n<\/div>\n<p>Bu yap\u0131land\u0131rma sayesinde, Google&#8217;\u0131n k\u00fcresel y\u00fck dengeleyicisi 10 b\u00f6lgedeki <code>realtime-api<\/code> servislerinin sa\u011fl\u0131k durumunu (health check) s\u00fcrekli izler. E\u011fer Asya&#8217;daki bir k\u00fcmede ar\u0131za ya\u015fan\u0131rsa, o b\u00f6lgedeki trafik otomatik ve kesintisiz olarak en yak\u0131n \u00e7al\u0131\u015fan b\u00f6lgeye aktar\u0131l\u0131r.<\/p>\n<h2>Vaka Analizi: T\u00fcrkiye Merkezli Bir Fintek \u015eirketinin K\u00fcresel Ba\u015far\u0131 Hikayesi<\/h2>\n<p>Teorik bilginin \u00f6tesine ge\u00e7mek i\u00e7in, ger\u00e7ek bir ba\u015far\u0131 hikayesine g\u00f6z atal\u0131m. T\u00fcrkiye merkezli bir finansal teknoloji (fintek) giri\u015fimi olan &#8220;ParaYol&#8221;, Avrupa, Orta Do\u011fu ve Asya-Pasifik b\u00f6lgelerindeki kullan\u0131c\u0131lara ger\u00e7ek zamanl\u0131 d\u00f6viz kuru ve para transferi API&#8217;si sunmaktad\u0131r.<\/p>\n<p>Ba\u015flang\u0131\u00e7ta ParaYol, sadece 3 farkl\u0131 b\u00f6lgede manuel olarak kopyalanm\u0131\u015f Kubernetes manifestleri ile hizmet veriyordu. \u015eirket k\u00fcresel olarak b\u00fcy\u00fcd\u00fck\u00e7e ve b\u00f6lge say\u0131s\u0131 10&#8217;a ula\u015ft\u0131\u011f\u0131nda, operasyonel s\u00fcre\u00e7ler t\u0131kanma noktas\u0131na geldi. Yeni bir API s\u00fcr\u00fcm\u00fc yay\u0131nlamak tam 4 saat s\u00fcr\u00fcyordu ve her da\u011f\u0131t\u0131mda en az bir b\u00f6lgede yap\u0131land\u0131rma hatas\u0131 nedeniyle kesinti ya\u015fan\u0131yordu. T\u00fcrkiye&#8217;deki m\u00fchendislik ekibi, geceleri farkl\u0131 saat dilimlerindeki sistemleri ayakta tutmak i\u00e7in n\u00f6bet tutmak zorunda kal\u0131yordu.<\/p>\n<p>ParaYol m\u00fchendisleri, bu makalede anlatt\u0131\u011f\u0131m\u0131z mimariyi uygulamaya karar verdiler:<\/p>\n<ul>\n<li>T\u00fcm Kubernetes altyap\u0131s\u0131n\u0131 GKE Enterprise (Anthos) alt\u0131nda birle\u015ftirdiler.<\/li>\n<li>Kustomize kullanarak 120 farkl\u0131 YAML dosyas\u0131n\u0131 tek bir <code>base<\/code> ve 10 adet k\u00fc\u00e7\u00fck <code>overlay<\/code> dosyas\u0131na indirdiler.<\/li>\n<li>Multi-Cluster Gateway entegrasyonu ile k\u00fcresel gecikme s\u00fcrelerini (latency) optimize ettiler.<\/li>\n<\/ul>\n<p>Sonu\u00e7lar olduk\u00e7a \u00e7arp\u0131c\u0131yd\u0131. Yeni bir s\u00fcr\u00fcm\u00fcn t\u00fcm d\u00fcnyada yay\u0131na al\u0131nma s\u00fcresi 4 saatten sadece 5 dakikaya d\u00fc\u015ft\u00fc. En \u00f6nemlisi, insan kaynakl\u0131 yap\u0131land\u0131rma hatalar\u0131 s\u0131f\u0131ra indi. T\u00fcrkiye&#8217;deki kullan\u0131c\u0131lar i\u00e7in gecikme s\u00fcresi zaten d\u00fc\u015f\u00fckt\u00fc ancak bu mimari sayesinde Tokyo ve New York&#8217;taki kullan\u0131c\u0131lar\u0131n API yan\u0131t s\u00fcreleri de ortalama 320ms&#8217;den 28ms&#8217;ye geriledi.<\/p>\n<h2>\u0130leri D\u00fczey \u0130pu\u00e7lar\u0131: ArgoCD ApplicationSet ile Otomasyon<\/h2>\n<p>Kustomize ile manifestlerimizi sadele\u015ftirdik ancak hala 10 farkl\u0131 k\u00fcme i\u00e7in ArgoCD \u00fczerinde ayr\u0131 ayr\u0131 &#8220;Application&#8221; (Uygulama) tan\u0131mlamak zorunda kalabiliriz. Bu da ba\u015fka bir kod tekrar\u0131 do\u011furur. Bu sorunu \u00e7\u00f6zmek i\u00e7in ArgoCD&#8217;nin <strong>ApplicationSet<\/strong> \u00f6zelli\u011fini kullanabiliriz.<\/p>\n<p>ApplicationSet, tek bir \u015fablon kullanarak dinamik olarak birden fazla ArgoCD uygulamas\u0131 olu\u015fturman\u0131z\u0131 sa\u011flar. A\u015fa\u011f\u0131daki \u00f6rnek, Git deponuzdaki klas\u00f6rleri veya tan\u0131mlad\u0131\u011f\u0131n\u0131z bir listeyi tarayarak 10 b\u00f6lgeye otomatik da\u011f\u0131t\u0131m ger\u00e7ekle\u015ftirir:<\/p>\n<div class=\"code-container\">\n<pre><code>apiVersion: argoproj.io\/v1alpha1\nkind: ApplicationSet\nmetadata:\n  name: realtime-api-regions\n  namespace: argocd\nspec:\n  generators:\n  - list:\n      elements:\n      - cluster: europe-west3-cluster\n        region: europe-west3\n      - cluster: us-central1-cluster\n        region: us-central1\n      - cluster: asia-east1-cluster\n        region: asia-east1\n  template:\n    metadata:\n      name: '{{region}}-realtime-api'\n    spec:\n      project: default\n      source:\n        repoURL: 'https:\/\/github.com\/parayol\/gitops-infra.git'\n        targetRevision: HEAD\n        path: 'overlays\/{{region}}'\n      destination:\n        name: '{{cluster}}'\n        namespace: default\n      syncPolicy:\n        automated:\n          prune: true\n          selfHeal: true<\/code><\/pre>\n<\/div>\n<p>Bu ApplicationSet sayesinde, listeye yeni bir b\u00f6lge ekledi\u011finiz anda ArgoCD otomatik olarak o b\u00f6lgedeki GKE k\u00fcmesine ba\u011flan\u0131r, Kustomize overlay dosyas\u0131n\u0131 okur ve uygulamay\u0131 saniyeler i\u00e7inde aya\u011fa kald\u0131r\u0131r. Art\u0131k 10 de\u011fil, 100 b\u00f6lgeniz olsa bile tek bir sat\u0131r kod de\u011fi\u015ftirmeden altyap\u0131n\u0131z\u0131 \u00f6l\u00e7ekleyebilirsiniz.<\/p>\n<h2>Sonu\u00e7 ve S\u0131k\u00e7a Sorulan Sorular<\/h2>\n<p>K\u00fcresel \u00f6l\u00e7ekte ger\u00e7ek zamanl\u0131 bir API \u00e7al\u0131\u015ft\u0131rmak, sadece g\u00fc\u00e7l\u00fc sunuculara sahip olmakla ilgili de\u011fildir; bu altyap\u0131y\u0131 nas\u0131l y\u00f6netti\u011finizle do\u011frudan ilgilidir. GKE, Kustomize ve GitOps prensiplerini bir araya getirerek, kod tekrar\u0131 yapmadan, hata pay\u0131n\u0131 en aza indirerek ve operasyonel maliyetleri d\u00fc\u015f\u00fcrerek 10 global b\u00f6lgede stabil bir sistem kurabilirsiniz.<\/p>\n<p>Bu makalede \u00f6\u011frendi\u011finiz y\u00f6ntemler, karma\u015f\u0131k mikroservis mimarilerinizi y\u00f6netirken size h\u0131z ve g\u00fcven kazand\u0131racakt\u0131r. Unutmay\u0131n, en iyi kod yaz\u0131lmam\u0131\u015f koddur; en iyi manifest ise tekrar edilmemi\u015f manifesttir.<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular<\/h3>\n<p><strong>1. Kustomize yerine neden Helm kullanm\u0131yoruz?<\/strong><br \/>\nHelm, parametrele\u015ftirmek i\u00e7in \u015fablonlama (templating) kullan\u0131r ve bu durum \u00e7ok b\u00fcy\u00fck projelerde okunabilirli\u011fi zorla\u015ft\u0131rabilir. Kustomize ise saf Kubernetes YAML dosyalar\u0131yla \u00e7al\u0131\u015f\u0131r. Ancak, her iki arac\u0131 birlikte de kullanabilirsiniz; Helm ile paketledi\u011finiz uygulamalar\u0131 Kustomize ile b\u00f6lgelere g\u00f6re yamalayabilirsiniz.<\/p>\n<p><strong>2. Multi-Cluster Gateway kullanman\u0131n ek maliyeti nedir?<\/strong><br \/>\nMulti-Cluster Gateway, Google Cloud&#8217;un GKE Enterprise (Anthos) lisanslamas\u0131na veya kulland\u0131\u011f\u0131n\u0131z y\u00fck dengeleyici (load balancer) kaynaklar\u0131n\u0131n saatlik \u00fccretlendirmesine tabidir. 10 ayr\u0131 y\u00fck dengeleyici olu\u015fturmak yerine tek bir k\u00fcresel ge\u00e7it kullanmak genellikle a\u011f trafi\u011fi optimizasyonu sa\u011flad\u0131\u011f\u0131 i\u00e7in uzun vadede daha maliyet etkindir.<\/p>\n<p><strong>3. B\u00f6lgeler aras\u0131ndaki veritaban\u0131 senkronizasyonunu nas\u0131l \u00e7\u00f6zebiliriz?<\/strong><br \/>\nGer\u00e7ek zamanl\u0131 API&#8217;lerde veri taban\u0131 kritik bir rol oynar. Google Cloud Spanner veya tamamen y\u00f6netilen \u00e7ok b\u00f6lgeli (multi-region) Cloud SQL gibi k\u00fcresel olarak aktif-aktif (active-active) \u00e7al\u0131\u015fan veritaban\u0131 \u00e7\u00f6z\u00fcmlerini tercih ederek gecikme s\u00fcresini en aza indirebilirsiniz.<\/p>\n<p><strong>4. Yeni bir b\u00f6lge eklemek ne kadar s\u00fcrer?<\/strong><br \/>\nBu mimari kurulduktan sonra, yeni bir b\u00f6lge eklemek sadece <code>overlays<\/code> klas\u00f6r\u00fc alt\u0131nda yeni bir b\u00f6lge ad\u0131 olu\u015fturup (\u00f6rn: <code>us-east4<\/code>) ArgoCD ApplicationSet listesine bu b\u00f6lgeyi eklemekten ibarettir. Bu i\u015flem yakla\u015f\u0131k 2 dakika s\u00fcrer.<\/p>\n<p>#Kubernetes #GKE #GitOps #Kustomize #CloudComputing<\/p>\n<div class=\"github-example-link\"><strong>\u00d6rnek kod:<\/strong> <a href=\"https:\/\/github.com\/fatihsoysalcom\/gke-multi-region-api-deployment-generator\" target=\"_blank\" rel=\"noopener noreferrer\">github.com\/fatihsoysalcom\/gke-multi-region-api-deployment-generator<\/a><\/div>\n","protected":false},"excerpt":{"rendered":"GKE \u00fczerinde k\u00fcresel \u00f6l\u00e7ekte ger\u00e7ek zamanl\u0131 API \u00e7al\u0131\u015ft\u0131rmak ve manifest tekrarlar\u0131ndan kurtulmak m\u0131 istiyorsunuz? \u0130\u015fte ak\u0131ll\u0131 otomasyon y\u00f6ntemleri!","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1],"tags":[],"class_list":{"0":"post-43390","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-genel","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>GKE ile 10 B\u00f6lgede Tek Manifest ile API Da\u011f\u0131t\u0131m\u0131 - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/gke-ile-10-bolgede-tek-manifest-ile-api-dagitimi\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"GKE ile 10 B\u00f6lgede Tek Manifest ile API Da\u011f\u0131t\u0131m\u0131\" \/>\n<meta property=\"og:description\" content=\"GKE \u00fczerinde k\u00fcresel \u00f6l\u00e7ekte ger\u00e7ek zamanl\u0131 API \u00e7al\u0131\u015ft\u0131rmak ve manifest tekrarlar\u0131ndan kurtulmak m\u0131 istiyorsunuz? \u0130\u015fte ak\u0131ll\u0131 otomasyon y\u00f6ntemleri!\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/gke-ile-10-bolgede-tek-manifest-ile-api-dagitimi\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-07-17T06:01:14+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-07-17T06:01:40+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"11 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/gke-ile-10-bolgede-tek-manifest-ile-api-dagitimi\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/gke-ile-10-bolgede-tek-manifest-ile-api-dagitimi\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"GKE ile 10 B\u00f6lgede Tek Manifest ile API Da\u011f\u0131t\u0131m\u0131\",\"datePublished\":\"2026-07-17T06:01:14+00:00\",\"dateModified\":\"2026-07-17T06:01:40+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/gke-ile-10-bolgede-tek-manifest-ile-api-dagitimi\/\"},\"wordCount\":2031,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/gke-ile-10-bolgede-tek-manifest-ile-api-dagitimi\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/gke-ile-10-bolgede-tek-manifest-ile-api-dagitimi\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/gke-ile-10-bolgede-tek-manifest-ile-api-dagitimi\/\",\"name\":\"GKE ile 10 B\u00f6lgede Tek Manifest ile API Da\u011f\u0131t\u0131m\u0131 - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-07-17T06:01:14+00:00\",\"dateModified\":\"2026-07-17T06:01:40+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/gke-ile-10-bolgede-tek-manifest-ile-api-dagitimi\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/gke-ile-10-bolgede-tek-manifest-ile-api-dagitimi\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/gke-ile-10-bolgede-tek-manifest-ile-api-dagitimi\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"GKE ile 10 B\u00f6lgede Tek Manifest ile API Da\u011f\u0131t\u0131m\u0131\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"GKE ile 10 B\u00f6lgede Tek Manifest ile API Da\u011f\u0131t\u0131m\u0131 - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/gke-ile-10-bolgede-tek-manifest-ile-api-dagitimi\/","og_locale":"tr_TR","og_type":"article","og_title":"GKE ile 10 B\u00f6lgede Tek Manifest ile API Da\u011f\u0131t\u0131m\u0131","og_description":"GKE \u00fczerinde k\u00fcresel \u00f6l\u00e7ekte ger\u00e7ek zamanl\u0131 API \u00e7al\u0131\u015ft\u0131rmak ve manifest tekrarlar\u0131ndan kurtulmak m\u0131 istiyorsunuz? \u0130\u015fte ak\u0131ll\u0131 otomasyon y\u00f6ntemleri!","og_url":"https:\/\/fatihsoysal.com\/blog\/gke-ile-10-bolgede-tek-manifest-ile-api-dagitimi\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-07-17T06:01:14+00:00","article_modified_time":"2026-07-17T06:01:40+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"11 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/gke-ile-10-bolgede-tek-manifest-ile-api-dagitimi\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/gke-ile-10-bolgede-tek-manifest-ile-api-dagitimi\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"GKE ile 10 B\u00f6lgede Tek Manifest ile API Da\u011f\u0131t\u0131m\u0131","datePublished":"2026-07-17T06:01:14+00:00","dateModified":"2026-07-17T06:01:40+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/gke-ile-10-bolgede-tek-manifest-ile-api-dagitimi\/"},"wordCount":2031,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/gke-ile-10-bolgede-tek-manifest-ile-api-dagitimi\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/gke-ile-10-bolgede-tek-manifest-ile-api-dagitimi\/","url":"https:\/\/fatihsoysal.com\/blog\/gke-ile-10-bolgede-tek-manifest-ile-api-dagitimi\/","name":"GKE ile 10 B\u00f6lgede Tek Manifest ile API Da\u011f\u0131t\u0131m\u0131 - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-07-17T06:01:14+00:00","dateModified":"2026-07-17T06:01:40+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/gke-ile-10-bolgede-tek-manifest-ile-api-dagitimi\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/gke-ile-10-bolgede-tek-manifest-ile-api-dagitimi\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/gke-ile-10-bolgede-tek-manifest-ile-api-dagitimi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"GKE ile 10 B\u00f6lgede Tek Manifest ile API Da\u011f\u0131t\u0131m\u0131"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/43390","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=43390"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/43390\/revisions"}],"predecessor-version":[{"id":43391,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/43390\/revisions\/43391"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=43390"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=43390"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=43390"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}