{"id":38191,"date":"2026-01-25T13:41:33","date_gmt":"2026-01-25T10:41:33","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=38191"},"modified":"2026-01-25T13:41:33","modified_gmt":"2026-01-25T10:41:33","slug":"on-gereksinimler-ve-temel-hazirliklar","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/on-gereksinimler-ve-temel-hazirliklar\/","title":{"rendered":"\u00d6n Gereksinimler ve Temel Haz\u0131rl\u0131klar"},"content":{"rendered":"<p><body><\/p>\n<p>Modern bulut tabanl\u0131 uygulamalar\u0131n vazge\u00e7ilmezi olan Kubernetes, konteynerize edilmi\u015f i\u015f y\u00fcklerini y\u00f6netme konusunda e\u015fsiz bir esneklik sunar. Ancak bu uygulamalar\u0131n d\u0131\u015f d\u00fcnyaya g\u00fcvenli bir \u015fekilde a\u00e7\u0131lmas\u0131, \u00f6zellikle de HTTPS \u00fczerinden eri\u015fim sa\u011flanmas\u0131 kritik bir \u00f6neme sahiptir. Bu rehberde, Kubernetes Ingress kaynaklar\u0131n\u0131z\u0131 Let&#8217;s Encrypt ile nas\u0131l g\u00fcvence alt\u0131na alaca\u011f\u0131n\u0131z\u0131, \u00fccretsiz ve otomatik SSL\/TLS sertifikalar\u0131 kullanarak ad\u0131m ad\u0131m a\u00e7\u0131klayaca\u011f\u0131z.<\/p>\n<p>Uygulamalar\u0131n\u0131z\u0131n kullan\u0131c\u0131lar taraf\u0131ndan g\u00fcvenle eri\u015filebilir olmas\u0131, sadece veri \u015fifrelemesi i\u00e7in de\u011fil, ayn\u0131 zamanda taray\u0131c\u0131lar\u0131n &#8220;G\u00fcvenli De\u011fil&#8221; uyar\u0131s\u0131n\u0131 engellemek ve web sitenizin profesyonel imaj\u0131n\u0131 korumak i\u00e7in de hayati \u00f6nem ta\u015f\u0131r. Let&#8217;s Encrypt ve <code>cert-manager<\/code> arac\u0131, bu s\u00fcreci tamamen otomatikle\u015ftirerek sertifika y\u00f6netiminin karma\u015f\u0131kl\u0131\u011f\u0131n\u0131 ortadan kald\u0131r\u0131r.<\/p>\n<p>Bu rehberde, bir Kubernetes k\u00fcmesinde Ingress Controller&#8217;dan ba\u015flayarak, <code>cert-manager<\/code> kurulumuna, Let&#8217;s Encrypt ile sertifika talebinde bulunmaya ve son olarak Ingress kayna\u011f\u0131n\u0131z\u0131 TLS ile yap\u0131land\u0131rmaya kadar t\u00fcm ad\u0131mlar\u0131 detayl\u0131 bir \u015fekilde ele alaca\u011f\u0131z.<\/p>\n<h2>\u00d6n Gereksinimler ve Temel Haz\u0131rl\u0131klar<\/h2>\n<p>Bu rehberdeki ad\u0131mlar\u0131 takip edebilmek i\u00e7in a\u015fa\u011f\u0131daki \u00f6n gereksinimlere sahip olman\u0131z gerekmektedir:<\/p>\n<h3>1. \u00c7al\u0131\u015f\u0131r Durumda Bir Kubernetes K\u00fcmesi<\/h3>\n<p>Herhangi bir bulut sa\u011flay\u0131c\u0131s\u0131nda (GCP, AWS, Azure vb.) veya kendi sunucular\u0131n\u0131zda (on-premise) \u00e7al\u0131\u015fan bir Kubernetes k\u00fcmeniz olmal\u0131d\u0131r. Bu k\u00fcme \u00fczerinde <code>kubectl<\/code> komutlar\u0131n\u0131 \u00e7al\u0131\u015ft\u0131rabiliyor ve y\u00f6netici yetkilerine sahip olmal\u0131s\u0131n\u0131z.<\/p>\n<h3>2. Bir Ingress Controller<\/h3>\n<p>Kubernetes Ingress kaynaklar\u0131, gelen HTTP\/HTTPS trafi\u011fini k\u00fcme i\u00e7indeki servislere y\u00f6nlendirmek i\u00e7in bir Ingress Controller&#8217;a ihtiya\u00e7 duyar. En yayg\u0131n kullan\u0131lanlardan biri olan Nginx Ingress Controller&#8217;\u0131 bu rehberde varsayaca\u011f\u0131z. E\u011fer y\u00fckl\u00fc de\u011filse, a\u015fa\u011f\u0131daki komutlarla kurabilirsiniz:<\/p>\n<pre><code class=\"language-bash\">kubectl apply -f https:\/\/raw.githubusercontent.com\/kubernetes\/ingress-nginx\/controller-v1.8.2\/deploy\/static\/provider\/cloud\/deploy.yaml\n<\/code><\/pre>\n<p>Kurulumun ard\u0131ndan Nginx Ingress Controller&#8217;\u0131n \u00e7al\u0131\u015f\u0131p \u00e7al\u0131\u015fmad\u0131\u011f\u0131n\u0131 kontrol edelim:<\/p>\n<pre><code class=\"language-bash\">kubectl get pods -n ingress-nginx\n<\/code><\/pre>\n<p>Bu komut, <code>ingress-nginx<\/code> namespace&#8217;indeki pod&#8217;lar\u0131 listelemeli ve durumlar\u0131n\u0131n <code>Running<\/code> oldu\u011funu g\u00f6stermelidir.<\/p>\n<h3>3. Alan Ad\u0131 (Domain Name) ve DNS Yap\u0131land\u0131rmas\u0131<\/h3>\n<p>Sertifika alaca\u011f\u0131n\u0131z bir alan ad\u0131na (\u00f6rne\u011fin, <code>uygulamam.com<\/code>) sahip olmal\u0131s\u0131n\u0131z. Bu alan ad\u0131n\u0131n bir A kayd\u0131 veya CNAME kayd\u0131, Kubernetes Ingress Controller&#8217;\u0131n\u0131z\u0131n d\u0131\u015f IP adresini veya DNS ad\u0131n\u0131 i\u015faret etmelidir. Ingress Controller&#8217;\u0131n\u0131z\u0131n d\u0131\u015f IP adresini a\u015fa\u011f\u0131daki komutla bulabilirsiniz:<\/p>\n<pre><code class=\"language-bash\">kubectl get services -n ingress-nginx ingress-nginx-controller\n<\/code><\/pre>\n<p><code>EXTERNAL-IP<\/code> s\u00fctunundaki IP adresini not al\u0131n ve alan ad\u0131n\u0131z\u0131n A kayd\u0131n\u0131 bu IP adresine y\u00f6nlendirin. DNS de\u011fi\u015fikliklerinin internet \u00fczerinde yay\u0131lmas\u0131 biraz zaman alabilir.<\/p>\n<h3>4. Helm Kurulumu<\/h3>\n<p><code>cert-manager<\/code> kurulumu i\u00e7in Helm paket y\u00f6neticisini kullanaca\u011f\u0131z. Helm y\u00fckl\u00fc de\u011filse, i\u015fletim sisteminize uygun \u015fekilde kurman\u0131z gerekmektedir. Kurulum talimatlar\u0131 i\u00e7in <a href=\"https:\/\/helm.sh\/docs\/intro\/install\/\" target=\"_blank\">Helm resmi dok\u00fcmantasyonuna<\/a> ba\u015fvurabilirsiniz.<\/p>\n<h2>Cert-Manager Kurulumu<\/h2>\n<p><code>cert-manager<\/code>, Kubernetes k\u00fcmelerinde sertifikalar\u0131n otomatik olarak sa\u011flanmas\u0131, yenilenmesi ve y\u00f6netilmesinden sorumlu g\u00fc\u00e7l\u00fc bir ara\u00e7t\u0131r. Let&#8217;s Encrypt gibi sertifika otoriteleriyle entegre olarak \u00e7al\u0131\u015f\u0131r ve sertifika y\u00f6netimini sizin i\u00e7in basitle\u015ftirir.<\/p>\n<h3>1. Cert-Manager CRD&#8217;lerini Y\u00fckleme<\/h3>\n<p><code>cert-manager<\/code>, Kubernetes&#8217;e \u00f6zel kaynak tan\u0131mlamalar\u0131 (Custom Resource Definitions &#8211; CRD&#8217;ler) ekler. Bu CRD&#8217;leri \u00f6ncelikle y\u00fcklememiz gerekir:<\/p>\n<pre><code class=\"language-bash\">kubectl apply -f https:\/\/github.com\/cert-manager\/cert-manager\/releases\/download\/v1.13.2\/cert-manager.crds.yaml\n<\/code><\/pre>\n<p>Bu komut, <code>Certificate<\/code>, <code>Issuer<\/code>, <code>ClusterIssuer<\/code> gibi kaynaklar\u0131 Kubernetes API&#8217;sine tan\u0131t\u0131r.<\/p>\n<h3>2. Cert-Manager Repository&#8217;sini Ekleme ve Kurulum<\/h3>\n<p>\u015eimdi Helm kullanarak <code>cert-manager<\/code>&#8216;\u0131 kural\u0131m. \u00d6ncelikle Helm repository&#8217;sini ekliyoruz:<\/p>\n<pre><code class=\"language-bash\">helm repo add jetstack https:\/\/charts.jetstack.io\nhelm repo update\n<\/code><\/pre>\n<p>Ard\u0131ndan, <code>cert-manager<\/code>&#8216;\u0131 ayr\u0131 bir namespace&#8217;e kuruyoruz. Bu, k\u00fcme kaynaklar\u0131n\u0131 d\u00fczenli tutmak i\u00e7in iyi bir pratiktir:<\/p>\n<pre><code class=\"language-bash\">helm install cert-manager jetstack\/cert-manager \\\n  --namespace cert-manager \\\n  --create-namespace \\\n  --version v1.13.2 \\\n  --set installCRDs=true\n<\/code><\/pre>\n<p><code>--set installCRDs=true<\/code> parametresini eklemek, CRD&#8217;lerin otomatik olarak y\u00fcklenmesini sa\u011flar, ancak yukar\u0131daki ad\u0131m\u0131 zaten manuel olarak yapt\u0131\u011f\u0131m\u0131z i\u00e7in bu parametre opsiyoneldir. Yine de Helm chart&#8217;\u0131 bu \u015fekilde yap\u0131land\u0131r\u0131lm\u0131\u015fsa kullanmakta fayda var.<\/p>\n<h3>3. Kurulumu Do\u011frulama<\/h3>\n<p><code>cert-manager<\/code> pod&#8217;lar\u0131n\u0131n ba\u015far\u0131yla \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 kontrol edelim:<\/p>\n<pre><code class=\"language-bash\">kubectl get pods --namespace cert-manager\n<\/code><\/pre>\n<p>A\u015fa\u011f\u0131dakine benzer \u00e7\u0131kt\u0131lar g\u00f6rmelisiniz:<\/p>\n<pre><code>NAME                                       READY   STATUS    RESTARTS   AGE\ncert-manager-5f677b588-abcd1               1\/1     Running   0          5m\ncert-manager-cainjector-785c494f6c-efgh2   1\/1     Running   0          5m\ncert-manager-webhook-64c87b8d8-ijkl3       1\/1     Running   0          5m\n<\/code><\/pre>\n<h2>Cert-Manager Yap\u0131land\u0131rmas\u0131: Issuer ve ClusterIssuer<\/h2>\n<p><code>cert-manager<\/code>&#8216;\u0131n Let&#8217;s Encrypt ile ileti\u015fim kurabilmesi i\u00e7in bir <code>Issuer<\/code> veya <code>ClusterIssuer<\/code> kayna\u011f\u0131 tan\u0131mlamam\u0131z gerekir. Bu kaynaklar, sertifika taleplerinin hangi sertifika otoritesine (CA) g\u00f6nderilece\u011fini ve hangi do\u011frulama y\u00f6nteminin (challenge) kullan\u0131laca\u011f\u0131n\u0131 belirtir.<\/p>\n<ul>\n<li><strong><code>Issuer<\/code>:<\/strong> Belirli bir namespace&#8217;e \u00f6zg\u00fc sertifika yetkilendirmesi sa\u011flar.<\/li>\n<li><strong><code>ClusterIssuer<\/code>:<\/strong> T\u00fcm k\u00fcme genelinde kullan\u0131labilen sertifika yetkilendirmesi sa\u011flar. Genellikle bu tercih edilir, \u00e7\u00fcnk\u00fc sertifikalar\u0131 farkl\u0131 namespace&#8217;lerdeki uygulamalar i\u00e7in kullanman\u0131za olanak tan\u0131r.<\/li>\n<\/ul>\n<p>Bu rehberde, t\u00fcm k\u00fcme genelinde ge\u00e7erli olacak bir <code>ClusterIssuer<\/code> kullanaca\u011f\u0131z.<\/p>\n<h3>Let&#8217;s Encrypt Ortamlar\u0131: Staging ve Production<\/h3>\n<p>Let&#8217;s Encrypt, iki farkl\u0131 ortam sunar:<\/p>\n<ul>\n<li><strong>Staging (Ge\u00e7ici):<\/strong> Test ama\u00e7l\u0131 kullan\u0131l\u0131r. Rate limitleri (belli bir s\u00fcrede yap\u0131labilecek istek say\u0131s\u0131) \u00e7ok daha d\u00fc\u015f\u00fckt\u00fcr, bu sayede deneme yan\u0131lma yaparken ger\u00e7ek sertifika limitlerine tak\u0131lmazs\u0131n\u0131z. Ge\u00e7ici sertifikalar verir ve taray\u0131c\u0131lar taraf\u0131ndan g\u00fcvenilir olarak tan\u0131nmaz.<\/li>\n<li><strong>Production (\u00dcretim):<\/strong> Ger\u00e7ek, g\u00fcvenilir sertifikalar verir. Daha s\u0131k\u0131 rate limitleri vard\u0131r.<\/li>\n<\/ul>\n<p>\u00d6nce Staging ortam\u0131n\u0131 kullanarak yap\u0131land\u0131rman\u0131z\u0131 test etmeniz \u015fiddetle tavsiye edilir.<\/p>\n<h3>ClusterIssuer Tan\u0131mlama (Staging)<\/h3>\n<p>A\u015fa\u011f\u0131daki YAML dosyas\u0131n\u0131 <code>letsencrypt-staging-clusterissuer.yaml<\/code> olarak kaydedin:<\/p>\n<pre><code class=\"language-yaml\">apiVersion: cert-manager.io\/v1\nkind: ClusterIssuer\nmetadata:\n  name: letsencrypt-staging\nspec:\n  acme:\n    # Let's Encrypt Staging ortam\u0131 URL'si\n    server: https:\/\/acme-staging-v02.api.letsencrypt.org\/directory\n    # Sertifika yenileme ve \u00f6nemli bildirimler i\u00e7in e-posta adresi\n    email: your-email@example.com\n    # Sertifika anahtar\u0131n\u0131 depolamak i\u00e7in secret\n    privateKeySecretRef:\n      name: letsencrypt-staging-key\n    # Alan ad\u0131 do\u011frulama y\u00f6ntemleri\n    solvers:\n    - http01:\n        # HTTP01 challenge i\u00e7in Ingress Controller s\u0131n\u0131f\u0131\n        ingress:\n          class: nginx\n<\/code><\/pre>\n<p><code>your-email@example.com<\/code> k\u0131sm\u0131n\u0131 kendi e-posta adresinizle de\u011fi\u015ftirmeyi unutmay\u0131n. Bu e-posta adresi, sertifika yenileme bildirimleri veya herhangi bir sorun durumunda Let&#8217;s Encrypt taraf\u0131ndan kullan\u0131lacakt\u0131r.<\/p>\n<p>Bu dosyay\u0131 uygulay\u0131n:<\/p>\n<pre><code class=\"language-bash\">kubectl apply -f letsencrypt-staging-clusterissuer.yaml\n<\/code><\/pre>\n<p><code>ClusterIssuer<\/code>&#8216;\u0131n durumunu kontrol edelim:<\/p>\n<pre><code class=\"language-bash\">kubectl get clusterissuer letsencrypt-staging\n<\/code><\/pre>\n<p><code>READY<\/code> s\u00fctununda <code>True<\/code> g\u00f6rmelisiniz. E\u011fer <code>False<\/code> ise, <code>kubectl describe clusterissuer letsencrypt-staging<\/code> komutu ile daha fazla bilgi alabilirsiniz.<\/p>\n<h3>ClusterIssuer Tan\u0131mlama (Production)<\/h3>\n<p>Staging ortam\u0131nda testleriniz ba\u015far\u0131l\u0131 olduktan sonra, Production ortam\u0131na ge\u00e7ebilirsiniz. A\u015fa\u011f\u0131daki YAML dosyas\u0131n\u0131 <code>letsencrypt-production-clusterissuer.yaml<\/code> olarak kaydedin:<\/p>\n<pre><code class=\"language-yaml\">apiVersion: cert-manager.io\/v1\nkind: ClusterIssuer\nmetadata:\n  name: letsencrypt-production\nspec:\n  acme:\n    # Let's Encrypt Production ortam\u0131 URL'si\n    server: https:\/\/acme-v02.api.letsencrypt.org\/directory\n    email: your-email@example.com\n    privateKeySecretRef:\n      name: letsencrypt-production-key\n    solvers:\n    - http01:\n        ingress:\n          class: nginx\n<\/code><\/pre>\n<p>Yine, e-posta adresinizi g\u00fcncellemeyi unutmay\u0131n.<\/p>\n<p>Bu dosyay\u0131 uygulay\u0131n:<\/p>\n<pre><code class=\"language-bash\">kubectl apply -f letsencrypt-production-clusterissuer.yaml\n<\/code><\/pre>\n<p>Durumunu kontrol edin:<\/p>\n<pre><code class=\"language-bash\">kubectl get clusterissuer letsencrypt-production\n<\/code><\/pre>\n<h2>TLS Destekli Ingress Kayna\u011f\u0131 Olu\u015fturma<\/h2>\n<p>Art\u0131k <code>cert-manager<\/code> ve <code>ClusterIssuer<\/code>&#8216;lar\u0131m\u0131z haz\u0131r oldu\u011funa g\u00f6re, uygulamam\u0131z i\u00e7in TLS destekli bir Ingress kayna\u011f\u0131 olu\u015fturabiliriz. Bu Ingress kayna\u011f\u0131, <code>cert-manager<\/code>&#8216;a hangi sertifikan\u0131n hangi alan ad\u0131 i\u00e7in al\u0131naca\u011f\u0131n\u0131 ve hangi <code>ClusterIssuer<\/code>&#8216;\u0131n kullan\u0131laca\u011f\u0131n\u0131 bildirecektir.<\/p>\n<p>\u00d6ncelikle, \u00f6rnek bir uygulama ve servis olu\u015ftural\u0131m. Bu uygulama, basit bir Nginx web sunucusu olabilir.<\/p>\n<h3>\u00d6rnek Uygulama ve Servis<\/h3>\n<p>A\u015fa\u011f\u0131daki YAML dosyas\u0131n\u0131 <code>example-app.yaml<\/code> olarak kaydedin:<\/p>\n<pre><code class=\"language-yaml\">apiVersion: apps\/v1\nkind: Deployment\nmetadata:\n  name: example-nginx\nspec:\n  selector:\n    matchLabels:\n      app: example-nginx\n  replicas: 1\n  template:\n    metadata:\n      labels:\n        app: example-nginx\n    spec:\n      containers:\n      - name: nginx\n        image: nginx:latest\n        ports:\n        - containerPort: 80\n---\napiVersion: v1\nkind: Service\nmetadata:\n  name: example-nginx-service\nspec:\n  selector:\n    app: example-nginx\n  ports:\n    - protocol: TCP\n      port: 80\n      targetPort: 80\n  type: ClusterIP\n<\/code><\/pre>\n<p>Bu dosyay\u0131 uygulay\u0131n:<\/p>\n<pre><code class=\"language-bash\">kubectl apply -f example-app.yaml\n<\/code><\/pre>\n<h3>TLS Destekli Ingress Olu\u015fturma<\/h3>\n<p>\u015eimdi, <code>example-app.yaml<\/code> dosyas\u0131nda olu\u015fturdu\u011fumuz servise d\u0131\u015far\u0131dan TLS ile eri\u015fim sa\u011flayacak Ingress kayna\u011f\u0131n\u0131 tan\u0131mlayal\u0131m. A\u015fa\u011f\u0131daki YAML dosyas\u0131n\u0131 <code>example-ingress.yaml<\/code> olarak kaydedin:<\/p>\n<pre><code class=\"language-yaml\">apiVersion: networking.k8s.io\/v1\nkind: Ingress\nmetadata:\n  name: example-ingress\n  annotations:\n    # Bu annotation, cert-manager'a bu Ingress i\u00e7in bir sertifika almas\u0131n\u0131 s\u00f6yler.\n    # Kullanmak istedi\u011finiz ClusterIssuer'\u0131n ad\u0131n\u0131 buraya yaz\u0131n (letsencrypt-staging veya letsencrypt-production).\n    cert-manager.io\/cluster-issuer: letsencrypt-staging\n    # Nginx Ingress Controller'\u0131 kullan\u0131yorsan\u0131z, HTTP'den HTTPS'e y\u00f6nlendirme i\u00e7in bu annotation'\u0131 ekleyebilirsiniz.\n    nginx.ingress.kubernetes.io\/force-ssl-redirect: \"true\"\nspec:\n  ingressClassName: nginx # Nginx Ingress Controller kullan\u0131yorsan\u0131z bu sat\u0131r\u0131 ekleyin\n  tls:\n  - hosts:\n    - uygulamam.com # Alan ad\u0131n\u0131z\u0131 buraya yaz\u0131n\n    secretName: uygulamam-tls # Cert-manager taraf\u0131ndan olu\u015fturulacak Secret'\u0131n ad\u0131\n  rules:\n  - host: uygulamam.com # Alan ad\u0131n\u0131z\u0131 buraya yaz\u0131n\n    http:\n      paths:\n      - path: \/\n        pathType: Prefix\n        backend:\n          service:\n            name: example-nginx-service\n            port:\n              number: 80\n<\/code><\/pre>\n<p>Yukar\u0131daki YAML dosyas\u0131nda:<\/p>\n<ul>\n<li><code>uygulamam.com<\/code> k\u0131sm\u0131n\u0131 kendi alan ad\u0131n\u0131zla de\u011fi\u015ftirin.<\/li>\n<li><code>cert-manager.io\/cluster-issuer: letsencrypt-staging<\/code> annotation&#8217;\u0131, <code>cert-manager<\/code>&#8216;a <code>letsencrypt-staging<\/code> ClusterIssuer&#8217;\u0131n\u0131 kullanarak sertifika almas\u0131n\u0131 s\u00f6yler. Testleriniz bittikten sonra bunu <code>letsencrypt-production<\/code> olarak de\u011fi\u015ftirebilirsiniz.<\/li>\n<li><code>secretName: uygulamam-tls<\/code>, <code>cert-manager<\/code> taraf\u0131ndan olu\u015fturulacak ve sertifikay\u0131 i\u00e7erecek Kubernetes Secret&#8217;\u0131n\u0131n ad\u0131d\u0131r.<\/li>\n<\/ul>\n<p>Bu dosyay\u0131 uygulay\u0131n:<\/p>\n<pre><code class=\"language-bash\">kubectl apply -f example-ingress.yaml\n<\/code><\/pre>\n<h2>Do\u011frulama ve Sorun Giderme<\/h2>\n<p>Ingress kayna\u011f\u0131n\u0131 uygulad\u0131ktan sonra, <code>cert-manager<\/code> arka planda \u00e7al\u0131\u015fmaya ba\u015flayacak ve Let&#8217;s Encrypt ile ileti\u015fime ge\u00e7erek sertifika alma s\u00fcrecini ba\u015flatacakt\u0131r. Bu s\u00fcre\u00e7 genellikle birka\u00e7 dakika s\u00fcrer.<\/p>\n<h3>1. Sertifika Durumunu Kontrol Etme<\/h3>\n<p>Sertifika talebinizin durumunu kontrol etmek i\u00e7in a\u015fa\u011f\u0131daki komutu kullan\u0131n:<\/p>\n<pre><code class=\"language-bash\">kubectl get certificate\n<\/code><\/pre>\n<p>A\u015fa\u011f\u0131dakine benzer bir \u00e7\u0131kt\u0131 g\u00f6rmelisiniz:<\/p>\n<pre><code>NAME              READY   SECRET            AGE\nuygulamam-tls     True    uygulamam-tls     2m\n<\/code><\/pre>\n<p><code>READY<\/code> s\u00fctununda <code>True<\/code> yaz\u0131yorsa, sertifika ba\u015far\u0131yla al\u0131nm\u0131\u015f ve <code>uygulamam-tls<\/code> ad\u0131nda bir Secret olu\u015fturulmu\u015ftur.<\/p>\n<p>Daha detayl\u0131 bilgi i\u00e7in:<\/p>\n<pre><code class=\"language-bash\">kubectl describe certificate uygulamam-tls\n<\/code><\/pre>\n<h3>2. Secret&#8217;\u0131n Olu\u015ftu\u011funu Kontrol Etme<\/h3>\n<p>Sertifikan\u0131n depoland\u0131\u011f\u0131 Secret&#8217;\u0131n olu\u015ftu\u011funu do\u011frulay\u0131n:<\/p>\n<pre><code class=\"language-bash\">kubectl get secret uygulamam-tls\n<\/code><\/pre>\n<p>Bu komut, Secret&#8217;\u0131n var oldu\u011funu ve boyutunu g\u00f6stermelidir.<\/p>\n<h3>3. Ingress Durumunu Kontrol Etme<\/h3>\n<p>Ingress kayna\u011f\u0131n\u0131n da do\u011fru \u015fekilde yap\u0131land\u0131r\u0131ld\u0131\u011f\u0131ndan emin olun:<\/p>\n<pre><code class=\"language-bash\">kubectl get ingress example-ingress\n<\/code><\/pre>\n<p><code>ADDRESS<\/code> s\u00fctununda Ingress Controller&#8217;\u0131n\u0131z\u0131n d\u0131\u015f IP adresini g\u00f6rmelisiniz.<\/p>\n<h3>4. Taray\u0131c\u0131dan Eri\u015fimi Kontrol Etme<\/h3>\n<p>Art\u0131k taray\u0131c\u0131n\u0131zdan alan ad\u0131n\u0131za (\u00f6rne\u011fin, <code>https:\/\/uygulamam.com<\/code>) eri\u015ferek ba\u011flant\u0131n\u0131n g\u00fcvenli olup olmad\u0131\u011f\u0131n\u0131 kontrol edebilirsiniz. Taray\u0131c\u0131n\u0131z\u0131n adres \u00e7ubu\u011funda bir kilit simgesi g\u00f6rmelisiniz.<\/p>\n<h3>Yayg\u0131n Sorunlar ve \u00c7\u00f6z\u00fcmleri<\/h3>\n<ul>\n<li><strong><code>Certificate<\/code> durumunda <code>False<\/code> veya <code>Pending<\/code> kalmas\u0131:<\/strong>\n<ul>\n<li><code>kubectl describe certificate <sertifika-ad\u0131><\/code> komutunu kullanarak olaylar\u0131 kontrol edin.<\/li>\n<li><code>kubectl logs -n cert-manager deploy\/cert-manager-controller<\/code> komutuyla <code>cert-manager<\/code> kontrolc\u00fcs\u00fcn\u00fcn loglar\u0131n\u0131 inceleyin.<\/li>\n<li><strong>DNS Problemleri:<\/strong> Alan ad\u0131n\u0131z\u0131n A kayd\u0131n\u0131n Ingress Controller&#8217;\u0131n do\u011fru d\u0131\u015f IP adresini i\u015faret etti\u011finden emin olun. DNS yay\u0131l\u0131m\u0131 zaman alabilir.<\/li>\n<li><strong>Yanl\u0131\u015f E-posta Adresi:<\/strong> <code>ClusterIssuer<\/code> i\u00e7indeki e-posta adresinin ge\u00e7erli oldu\u011fundan emin olun.<\/li>\n<li><strong>Rate Limitler:<\/strong> \u00d6zellikle \u00fcretim ortam\u0131nda \u00e7ok s\u0131k sertifika iste\u011fi yaparsan\u0131z Let&#8217;s Encrypt&#8217;in rate limitlerine tak\u0131labilirsiniz. Bu y\u00fczden \u00f6nce Staging ortam\u0131n\u0131 kullan\u0131n.<\/li>\n<li><strong>Firewall Kurallar\u0131:<\/strong> K\u00fcmenizin d\u0131\u015far\u0131dan gelen HTTP (80) trafi\u011fine izin verdi\u011finden emin olun, \u00e7\u00fcnk\u00fc Let&#8217;s Encrypt HTTP01 challenge i\u00e7in bu portu kullan\u0131r.<\/li>\n<\/ul>\n<\/li>\n<li><strong>Ingress Controller \u00e7al\u0131\u015fm\u0131yor:<\/strong> <code>kubectl get pods -n ingress-nginx<\/code> komutuyla pod&#8217;lar\u0131n durumunu kontrol edin ve loglar\u0131n\u0131 inceleyin.<\/li>\n<\/ul>\n<p>Sorunlarla kar\u015f\u0131la\u015f\u0131rsan\u0131z, hata mesajlar\u0131n\u0131 dikkatlice okuyun ve ilgili kaynaklar\u0131n (<code>Certificate<\/code>, <code>Ingress<\/code>, <code>ClusterIssuer<\/code>, <code>Pod<\/code> loglar\u0131) durumunu kontrol etmek i\u00e7in <code>kubectl describe<\/code> ve <code>kubectl logs<\/code> komutlar\u0131n\u0131 kullan\u0131n.<\/p>\n<h2>Sonu\u00e7<\/h2>\n<p>Bu rehberde, Kubernetes k\u00fcmenizdeki Ingress kaynaklar\u0131n\u0131z\u0131 Let&#8217;s Encrypt ile nas\u0131l g\u00fcvence alt\u0131na alaca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m \u00f6\u011frendiniz. <code>cert-manager<\/code>&#8216;\u0131n g\u00fcc\u00fcn\u00fc kullanarak, SSL\/TLS sertifikalar\u0131n\u0131 otomatik olarak almay\u0131, yenilemeyi ve y\u00f6netmeyi ba\u015fard\u0131n\u0131z. Bu sayede uygulamalar\u0131n\u0131z hem daha g\u00fcvenli hale geldi hem de sertifika y\u00f6netimi i\u00e7in harcayaca\u011f\u0131n\u0131z zaman ve efor minimize edildi. Art\u0131k kullan\u0131c\u0131lar\u0131n\u0131z uygulamalar\u0131n\u0131za g\u00fcvenli ve \u015fifreli bir ba\u011flant\u0131 \u00fczerinden eri\u015febilirler.<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h3>\n<p><strong>S: Cert-manager neden gerekli? Sertifikalar\u0131 manuel olarak y\u00fckleyemez miyim?<\/strong><br \/>\nC: Evet, sertifikalar\u0131 manuel olarak Kubernetes Secret&#8217;lar\u0131na y\u00fckleyebilir ve Ingress kaynaklar\u0131n\u0131zda kullanabilirsiniz. Ancak cert-manager bu s\u00fcreci otomatikle\u015ftirir: sertifikalar\u0131 otomatik olarak ister, yeniler ve s\u00fcresi dolmadan \u00f6nce g\u00fcnceller. Bu, \u00f6zellikle \u00e7ok say\u0131da uygulaman\u0131z ve alan ad\u0131n\u0131z varsa manuel y\u00f6netimin getirece\u011fi y\u00fck\u00fc ortadan kald\u0131r\u0131r.<\/p>\n<p><strong>S: Wildcard sertifika (\u00f6rne\u011fin, <code>*.uygulamam.com<\/code>) alabilir miyim?<\/strong><br \/>\nC: Evet, cert-manager ile wildcard sertifikalar alabilirsiniz. Ancak wildcard sertifikalar i\u00e7in Let&#8217;s Encrypt, HTTP01 yerine DNS01 challenge y\u00f6ntemini gerektirir. Bu y\u00f6ntem, alan ad\u0131n\u0131z\u0131n DNS kay\u0131tlar\u0131n\u0131 cert-manager&#8217;\u0131n de\u011fi\u015ftirebilmesini veya do\u011frulayabilmesini gerektirir. Bu genellikle bulut sa\u011flay\u0131c\u0131n\u0131z\u0131n DNS API&#8217;si ile entegrasyon (\u00f6rne\u011fin, AWS Route 53, Google Cloud DNS) veya ExternalDNS gibi ara\u00e7lar arac\u0131l\u0131\u011f\u0131yla yap\u0131l\u0131r.<\/p>\n<p><strong>S: Sertifika yenileme otomatik mi ger\u00e7ekle\u015fiyor?<\/strong><br \/>\nC: Evet, cert-manager varsay\u0131lan olarak sertifikalar\u0131n s\u00fcresi dolmadan 30 g\u00fcn \u00f6nce otomatik olarak yenileme s\u00fcrecini ba\u015flat\u0131r ve yeni sertifikay\u0131 Kubernetes Secret&#8217;\u0131na kaydeder. Bu sayede manuel m\u00fcdahaleye gerek kalmaz.<\/p>\n<p><strong>S: Staging yerine do\u011frudan Production ClusterIssuer kullanabilir miyim?<\/strong><br \/>\nC: Teknik olarak evet, ancak bu \u00f6nerilmez. Let&#8217;s Encrypt&#8217;in \u00fcretim ortam\u0131, IP adresi ve alan ad\u0131 baz\u0131nda s\u0131k\u0131 rate limitlere sahiptir. Test a\u015famas\u0131nda yanl\u0131\u015f yap\u0131land\u0131rmalar nedeniyle bu limitlere tak\u0131labilir ve bir s\u00fcre boyunca ger\u00e7ek sertifika alamayabilirsiniz. \u00d6nce Staging ortam\u0131nda t\u00fcm yap\u0131land\u0131rman\u0131n do\u011fru \u00e7al\u0131\u015ft\u0131\u011f\u0131ndan emin olmak en g\u00fcvenli yakla\u015f\u0131md\u0131r.<\/p>\n<p><strong>S: Nginx Ingress Controller yerine ba\u015fka bir Ingress Controller kullanabilir miyim?<\/strong><br \/>\nC: Evet, cert-manager \u00e7o\u011fu Ingress Controller ile uyumludur. HTTP01 challenge i\u00e7in <code>ClusterIssuer<\/code> yap\u0131land\u0131rmas\u0131nda <code>ingress.class<\/code> alan\u0131n\u0131 kulland\u0131\u011f\u0131n\u0131z Ingress Controller&#8217;\u0131n s\u0131n\u0131f\u0131na g\u00f6re (\u00f6rne\u011fin, <code>gce<\/code>, <code>traefik<\/code> vb.) de\u011fi\u015ftirmeniz gerekebilir. Ingress kayna\u011f\u0131n\u0131zda da <code>ingressClassName<\/code> alan\u0131n\u0131 do\u011fru \u015fekilde belirtmelisiniz.<\/p>\n<p><\/body><br \/>\n<\/html><\/p>\n","protected":false},"excerpt":{"rendered":"Modern bulut tabanl\u0131 uygulamalar\u0131n vazge\u00e7ilmezi olan Kubernetes, konteynerize edilmi\u015f i\u015f y\u00fcklerini y\u00f6netme konusunda e\u015fsiz bir esneklik suna","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-38191","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>\u00d6n Gereksinimler ve Temel Haz\u0131rl\u0131klar - 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\/on-gereksinimler-ve-temel-hazirliklar\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u00d6n Gereksinimler ve Temel Haz\u0131rl\u0131klar\" \/>\n<meta property=\"og:description\" content=\"Modern bulut tabanl\u0131 uygulamalar\u0131n vazge\u00e7ilmezi olan Kubernetes, konteynerize edilmi\u015f i\u015f y\u00fcklerini y\u00f6netme konusunda e\u015fsiz bir esneklik suna\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/on-gereksinimler-ve-temel-hazirliklar\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-01-25T10:41:33+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=\"12 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/on-gereksinimler-ve-temel-hazirliklar\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/on-gereksinimler-ve-temel-hazirliklar\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"\u00d6n Gereksinimler ve Temel Haz\u0131rl\u0131klar\",\"datePublished\":\"2026-01-25T10:41:33+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/on-gereksinimler-ve-temel-hazirliklar\/\"},\"wordCount\":1925,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/on-gereksinimler-ve-temel-hazirliklar\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/on-gereksinimler-ve-temel-hazirliklar\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/on-gereksinimler-ve-temel-hazirliklar\/\",\"name\":\"\u00d6n Gereksinimler ve Temel Haz\u0131rl\u0131klar - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-01-25T10:41:33+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/on-gereksinimler-ve-temel-hazirliklar\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/on-gereksinimler-ve-temel-hazirliklar\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/on-gereksinimler-ve-temel-hazirliklar\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u00d6n Gereksinimler ve Temel Haz\u0131rl\u0131klar\"}]},{\"@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":"\u00d6n Gereksinimler ve Temel Haz\u0131rl\u0131klar - 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\/on-gereksinimler-ve-temel-hazirliklar\/","og_locale":"tr_TR","og_type":"article","og_title":"\u00d6n Gereksinimler ve Temel Haz\u0131rl\u0131klar","og_description":"Modern bulut tabanl\u0131 uygulamalar\u0131n vazge\u00e7ilmezi olan Kubernetes, konteynerize edilmi\u015f i\u015f y\u00fcklerini y\u00f6netme konusunda e\u015fsiz bir esneklik suna","og_url":"https:\/\/fatihsoysal.com\/blog\/on-gereksinimler-ve-temel-hazirliklar\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-01-25T10:41:33+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"12 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/on-gereksinimler-ve-temel-hazirliklar\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/on-gereksinimler-ve-temel-hazirliklar\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"\u00d6n Gereksinimler ve Temel Haz\u0131rl\u0131klar","datePublished":"2026-01-25T10:41:33+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/on-gereksinimler-ve-temel-hazirliklar\/"},"wordCount":1925,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/on-gereksinimler-ve-temel-hazirliklar\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/on-gereksinimler-ve-temel-hazirliklar\/","url":"https:\/\/fatihsoysal.com\/blog\/on-gereksinimler-ve-temel-hazirliklar\/","name":"\u00d6n Gereksinimler ve Temel Haz\u0131rl\u0131klar - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-01-25T10:41:33+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/on-gereksinimler-ve-temel-hazirliklar\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/on-gereksinimler-ve-temel-hazirliklar\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/on-gereksinimler-ve-temel-hazirliklar\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"\u00d6n Gereksinimler ve Temel Haz\u0131rl\u0131klar"}]},{"@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\/38191","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=38191"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/38191\/revisions"}],"predecessor-version":[{"id":38192,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/38191\/revisions\/38192"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=38191"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=38191"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=38191"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}