{"id":33737,"date":"2025-11-06T12:41:41","date_gmt":"2025-11-06T09:41:41","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=33737"},"modified":"2025-11-06T12:41:41","modified_gmt":"2025-11-06T09:41:41","slug":"etcd-kumesini-ansible-ile-ubuntu-18-04-uzerinde-kurma-ve-guvenligini-saglama","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/etcd-kumesini-ansible-ile-ubuntu-18-04-uzerinde-kurma-ve-guvenligini-saglama\/","title":{"rendered":"etcd K\u00fcmesini Ansible ile Ubuntu 18.04 \u00dczerinde Kurma ve G\u00fcvenli\u011fini Sa\u011flama"},"content":{"rendered":"<p><body><\/p>\n<h2>etcd K\u00fcmesini Ansible ile Ubuntu 18.04 \u00dczerinde Kurma ve G\u00fcvenli\u011fini Sa\u011flama<\/h2>\n<h3>Giri\u015f<\/h3>\n<p>Da\u011f\u0131t\u0131k sistemlerde yap\u0131land\u0131rma y\u00f6netimi ve servis ke\u015ffi, sistemlerin kararl\u0131l\u0131\u011f\u0131 ve \u00f6l\u00e7eklenebilirli\u011fi i\u00e7in kritik \u00f6neme sahiptir. etcd, bu ihtiya\u00e7lar\u0131 kar\u015f\u0131lamak \u00fczere tasarlanm\u0131\u015f, da\u011f\u0131t\u0131k ve g\u00fcvenilir bir anahtar-de\u011fer deposudur. Kubernetes gibi pop\u00fcler konteyner orkestrasyon platformlar\u0131n\u0131n temelini olu\u015fturan etcd, k\u00fcme durumunu, yap\u0131land\u0131rma verilerini ve meta verileri tutarl\u0131 bir \u015fekilde depolamak i\u00e7in kullan\u0131l\u0131r.<\/p>\n<p>Bu rehberde, etcd k\u00fcmesini Ubuntu 18.04 i\u015fletim sistemi \u00fczerinde Ansible otomasyon arac\u0131 kullanarak nas\u0131l kuraca\u011f\u0131m\u0131z\u0131 ve g\u00fcvenli\u011fini sa\u011flayaca\u011f\u0131m\u0131z\u0131 ad\u0131m ad\u0131m ele alaca\u011f\u0131z. Ansible, altyap\u0131 kod (Infrastructure as Code) prensiplerini benimseyerek tekrarlanabilir, tutarl\u0131 ve hatas\u0131z da\u011f\u0131t\u0131mlar yapmam\u0131z\u0131 sa\u011flar. G\u00fcvenlik taraf\u0131nda ise, etcd k\u00fcmesinin hem istemci-sunucu hem de d\u00fc\u011f\u00fcm-d\u00fc\u011f\u00fcm ileti\u015fimi i\u00e7in TLS (Transport Layer Security) \u015fifrelemesi ve kimlik do\u011frulamas\u0131 kullanmas\u0131n\u0131 sa\u011flayaca\u011f\u0131z.<\/p>\n<h3>\u00d6n Gereksinimler ve Haz\u0131rl\u0131k<\/h3>\n<p>etcd k\u00fcmesi kurmaya ba\u015flamadan \u00f6nce baz\u0131 \u00f6n gereksinimleri ve haz\u0131rl\u0131klar\u0131 tamamlamam\u0131z gerekiyor. Bu rehber i\u00e7in en az 3 adet Ubuntu 18.04 sunucuya ihtiyac\u0131m\u0131z olacak. Her sunucunun kendi IP adresine ve birbiriyle SSH eri\u015fimine sahip olmas\u0131 gerekmektedir.<\/p>\n<h4>Sunucu Haz\u0131rl\u0131\u011f\u0131<\/h4>\n<ol>\n<li><strong>Sunucular Aras\u0131nda SSH Eri\u015fimi:<\/strong> Ansible kontrol makinesinden t\u00fcm etcd d\u00fc\u011f\u00fcmlerine parola istemeden SSH eri\u015fimi kurulmal\u0131d\u0131r. Bu genellikle SSH anahtarlar\u0131 kullan\u0131larak yap\u0131l\u0131r.<\/li>\n<li><strong>Sudo Yetkileri:<\/strong> etcd d\u00fc\u011f\u00fcmlerinde Ansible&#8217;\u0131n komutlar\u0131 \u00e7al\u0131\u015ft\u0131rabilmesi i\u00e7in sudo yetkilerine sahip bir kullan\u0131c\u0131 olmal\u0131d\u0131r.<\/li>\n<li><strong>Hostname ve <code>\/etc\/hosts<\/code> Yap\u0131land\u0131rmas\u0131:<\/strong> Her etcd d\u00fc\u011f\u00fcm\u00fcn\u00fcn benzersiz bir hostname&#8217;i olmal\u0131 ve t\u00fcm d\u00fc\u011f\u00fcmlerin birbirlerinin IP adreslerini ve hostname&#8217;lerini <code>\/etc\/hosts<\/code> dosyalar\u0131nda (veya DNS&#8217;te) tan\u0131mlamas\u0131 \u00f6nerilir. Bu, k\u00fcmenin kararl\u0131 \u00e7al\u0131\u015fmas\u0131 i\u00e7in \u00f6nemlidir.\n<pre><code># etcd-node1 i\u00e7in\nsudo hostnamectl set-hostname etcd-node1\nsudo nano \/etc\/hosts\n<h2>A\u015fa\u011f\u0131dakileri ekleyin (IP adreslerinizi g\u00fcncelleyin)<\/h2>\n192.168.1.101 etcd-node1\n192.168.1.102 etcd-node2\n192.168.1.103 etcd-node3\n<\/code><\/pre>\n<\/li>\n<li><strong>G\u00fcvenlik Duvar\u0131 (UFW) Yap\u0131land\u0131rmas\u0131:<\/strong> etcd&#8217;nin \u00e7al\u0131\u015fmas\u0131 i\u00e7in gerekli portlar\u0131 a\u00e7mam\u0131z gerekmektedir.\n<ul>\n<li><code>2379\/tcp<\/code>: \u0130stemci-sunucu ileti\u015fimi i\u00e7in.<\/li>\n<li><code>2380\/tcp<\/code>: D\u00fc\u011f\u00fcmler aras\u0131 (peer-to-peer) ileti\u015fim i\u00e7in.<\/li>\n<li><code>22\/tcp<\/code>: SSH eri\u015fimi i\u00e7in.<\/li>\n<\/ul>\n<pre><code>sudo ufw allow 22\/tcp\nsudo ufw allow 2379\/tcp\nsudo ufw allow 2380\/tcp\nsudo ufw enable\n<\/code><\/pre>\n<\/li>\n<\/ol>\n<h4>Ansible Kontrol Makinesi Haz\u0131rl\u0131\u011f\u0131<\/h4>\n<p>Ansible kontrol makinenize Ansible&#8217;\u0131 kurman\u0131z gerekmektedir:<\/p>\n<pre><code>sudo apt update\nsudo apt install software-properties-common\nsudo add-apt-repository --yes --update ppa:ansible\/ansible\nsudo apt install ansible\n<\/code><\/pre>\n<h4>TLS Sertifikalar\u0131n\u0131n Olu\u015fturulmas\u0131<\/h4>\n<p>etcd k\u00fcmesinin g\u00fcvenli\u011fini sa\u011flamak i\u00e7in TLS sertifikalar\u0131na ihtiyac\u0131m\u0131z var. Her etcd d\u00fc\u011f\u00fcm\u00fc i\u00e7in bir sunucu sertifikas\u0131, istemcilerin etcd&#8217;ye ba\u011flanmas\u0131 i\u00e7in bir istemci sertifikas\u0131 ve hepsini imzalamak i\u00e7in bir Sertifika Yetkilisi (CA) sertifikas\u0131 olu\u015fturmal\u0131y\u0131z. Bu ad\u0131m\u0131 manuel olarak veya <code>cfssl<\/code> gibi ara\u00e7larla yapabilirsiniz. A\u015fa\u011f\u0131da gerekli sertifika t\u00fcrleri ve kullan\u0131mlar\u0131 \u00f6zetlenmi\u015ftir:<\/p>\n<ul>\n<li><strong>CA Sertifikas\u0131 (ca.pem, ca-key.pem):<\/strong> T\u00fcm di\u011fer sertifikalar\u0131 imzalamak i\u00e7in kullan\u0131l\u0131r.<\/li>\n<li><strong>Sunucu Sertifikalar\u0131 (server.pem, server-key.pem):<\/strong> Her etcd d\u00fc\u011f\u00fcm\u00fcn\u00fcn istemci ve di\u011fer d\u00fc\u011f\u00fcmlerle g\u00fcvenli ileti\u015fim kurmas\u0131 i\u00e7in. Bu sertifikalar <code>CN<\/code> (Common Name) olarak d\u00fc\u011f\u00fcm\u00fcn hostname&#8217;ini ve <code>SAN<\/code> (Subject Alternative Name) olarak d\u00fc\u011f\u00fcm\u00fcn IP adresini ve hostname&#8217;ini i\u00e7ermelidir.<\/li>\n<li><strong>\u0130stemci Sertifikas\u0131 (client.pem, client-key.pem):<\/strong> <code>etcdctl<\/code> gibi ara\u00e7lar\u0131n veya di\u011fer servislerin (\u00f6rn. Kubernetes API sunucusu) etcd k\u00fcmesine g\u00fcvenli bir \u015fekilde ba\u011flanmas\u0131 i\u00e7in.<\/li>\n<\/ul>\n<p>Olu\u015fturdu\u011funuz t\u00fcm sertifika dosyalar\u0131n\u0131 (<code>ca.pem<\/code>, <code>server.pem<\/code>, <code>server-key.pem<\/code>, <code>client.pem<\/code>, <code>client-key.pem<\/code>) Ansible kontrol makinenizde, etcd rol\u00fcn\u00fcn <code>files<\/code> dizini alt\u0131nda (\u00f6rne\u011fin, <code>roles\/etcd\/files\/ssl\/<\/code>) saklay\u0131n. Bu dosyalar\u0131 her d\u00fc\u011f\u00fcme kopyalayaca\u011f\u0131z.<\/p>\n<h3>Ansible Proje Yap\u0131s\u0131 Olu\u015fturma<\/h3>\n<p>Ansible projemiz i\u00e7in a\u015fa\u011f\u0131daki gibi bir dizin yap\u0131s\u0131 olu\u015ftural\u0131m:<\/p>\n<pre><code>etcd-ansible\/\n\u251c\u2500\u2500 inventory\/\n\u2502   \u2514\u2500\u2500 hosts.ini\n\u251c\u2500\u2500 group_vars\/\n\u2502   \u2514\u2500\u2500 all.yml\n\u251c\u2500\u2500 playbook.yml\n\u2514\u2500\u2500 roles\/\n    \u2514\u2500\u2500 etcd\/\n        \u251c\u2500\u2500 tasks\/\n        \u2502   \u2514\u2500\u2500 main.yml\n        \u251c\u2500\u2500 templates\/\n        \u2502   \u2514\u2500\u2500 etcd.service.j2\n        \u2514\u2500\u2500 files\/\n            \u2514\u2500\u2500 ssl\/\n                \u251c\u2500\u2500 ca.pem\n                \u251c\u2500\u2500 server.pem\n                \u251c\u2500\u2500 server-key.pem\n                \u251c\u2500\u2500 client.pem\n                \u2514\u2500\u2500 client-key.pem\n<\/code><\/pre>\n<h4><code>inventory\/hosts.ini<\/code><\/h4>\n<p>etcd d\u00fc\u011f\u00fcmlerimizi tan\u0131mlayal\u0131m. <code>ansible_host<\/code> kullanarak her d\u00fc\u011f\u00fcm\u00fcn IP adresini belirtin.<\/p>\n<pre><code>[etcd_nodes]\netcd-node1 ansible_host=192.168.1.101\netcd-node2 ansible_host=192.168.1.102\netcd-node3 ansible_host=192.168.1.103\n\n[all:vars]\nansible_user=your_ssh_user # SSH ba\u011flant\u0131s\u0131 i\u00e7in kullan\u0131c\u0131 ad\u0131n\u0131z\nansible_become=yes          # Sudo kullanmak i\u00e7in\n<\/code><\/pre>\n<h4><code>group_vars\/all.yml<\/code><\/h4>\n<p>T\u00fcm etcd d\u00fc\u011f\u00fcmleri i\u00e7in ge\u00e7erli olacak de\u011fi\u015fkenleri tan\u0131mlayal\u0131m.<\/p>\n<pre><code>---\netcd_version: 3.4.13 # Kullanmak istedi\u011finiz etcd s\u00fcr\u00fcm\u00fc\netcd_data_dir: \/var\/lib\/etcd\netcd_config_dir: \/etc\/etcd\netcd_ssl_dir: \"{{ etcd_config_dir }}\/ssl\"\netcd_peer_port: 2380\netcd_client_port: 2379\netcd_initial_cluster_token: etcd-cluster-token-01 # K\u00fcme ba\u015flatma i\u00e7in benzersiz bir token\n\n<h2>Sertifika yollar\u0131<\/h2>\netcd_ca_file: \"{{ etcd_ssl_dir }}\/ca.pem\"\netcd_server_cert_file: \"{{ etcd_ssl_dir }}\/server.pem\"\netcd_server_key_file: \"{{ etcd_ssl_dir }}\/server-key.pem\"\netcd_client_cert_file: \"{{ etcd_ssl_dir }}\/client.pem\"\netcd_client_key_file: \"{{ etcd_ssl_dir }}\/client-key.pem\"\n<\/code><\/pre>\n<h4><code>playbook.yml<\/code><\/h4>\n<p>Ana oynatma kitab\u0131m\u0131z, etcd rol\u00fcn\u00fc \u00e7a\u011f\u0131r\u0131r.<\/p>\n<pre><code>---\n- name: etcd K\u00fcmesini Kurma ve Yap\u0131land\u0131rma\n  hosts: etcd_nodes\n  roles:\n    - etcd\n<\/code><\/pre>\n<h3>Ansible Rol\u00fc: etcd Kurulumu ve Yap\u0131land\u0131rmas\u0131<\/h3>\n<h4><code>roles\/etcd\/tasks\/main.yml<\/code><\/h4>\n<p>Bu dosya, etcd kurulumu, yap\u0131land\u0131rmas\u0131 ve TLS sertifikalar\u0131n\u0131n da\u011f\u0131t\u0131m\u0131n\u0131 ger\u00e7ekle\u015ftiren ad\u0131mlar\u0131 i\u00e7erir.<\/p>\n<pre><code>---\n- name: Sistem paketlerini g\u00fcncelle\n  apt:\n    update_cache: yes\n    upgrade: dist\n  become: yes\n\n- name: Gerekli paketleri y\u00fckle\n  apt:\n    name:\n      - curl\n      - wget\n      - systemd\n    state: present\n  become: yes\n\n- name: etcd kullan\u0131c\u0131 ve grubunu olu\u015ftur\n  user:\n    name: etcd\n    group: etcd\n    system: yes\n    shell: \/sbin\/nologin\n    create_home: no\n  become: yes\n\n- name: etcd veri ve yap\u0131land\u0131rma dizinlerini olu\u015ftur\n  file:\n    path: \"{{ item }}\"\n    state: directory\n    owner: etcd\n    group: etcd\n    mode: '0700'\n  loop:\n    - \"{{ etcd_data_dir }}\"\n    - \"{{ etcd_config_dir }}\"\n    - \"{{ etcd_ssl_dir }}\"\n  become: yes\n\n- name: etcd ikili dosyalar\u0131n\u0131 indir ve \u00e7\u0131kar\n  unarchive:\n    src: \"https:\/\/github.com\/etcd-io\/etcd\/releases\/download\/v{{ etcd_version }}\/etcd-v{{ etcd_version }}-linux-amd64.tar.gz\"\n    dest: \/tmp\n    remote_src: yes\n  become: yes\n\n- name: etcd ikili dosyalar\u0131n\u0131 \/usr\/local\/bin'e ta\u015f\u0131\n  copy:\n    src: \"\/tmp\/etcd-v{{ etcd_version }}-linux-amd64\/{{ item }}\"\n    dest: \"\/usr\/local\/bin\/{{ item }}\"\n    owner: root\n    group: root\n    mode: '0755'\n    remote_src: yes\n  loop:\n    - etcd\n    - etcdctl\n  become: yes\n\n- name: Sertifika dosyalar\u0131n\u0131 etcd d\u00fc\u011f\u00fcmlerine kopyala\n  copy:\n    src: \"ssl\/{{ item }}\"\n    dest: \"{{ etcd_ssl_dir }}\/{{ item }}\"\n    owner: etcd\n    group: etcd\n    mode: '0400' # \u00d6zel anahtarlar i\u00e7in daha k\u0131s\u0131tl\u0131 izinler\n  loop:\n    - ca.pem\n    - server.pem\n    - server-key.pem\n    - client.pem\n    - client-key.pem\n  become: yes\n\n- name: systemd servis dosyas\u0131n\u0131 \u015fablondan olu\u015ftur\n  template:\n    src: etcd.service.j2\n    dest: \/etc\/systemd\/system\/etcd.service\n    owner: root\n    group: root\n    mode: '0644'\n  become: yes\n  notify:\n    - systemd daemon-reload\n    - etcd servisini yeniden ba\u015flat\n\n- name: etcd servisini ba\u015flat ve etkinle\u015ftir\n  systemd:\n    name: etcd\n    state: started\n    enabled: yes\n  become: yes\n\n- name: etcd k\u00fcmesinin sa\u011fl\u0131kl\u0131 olmas\u0131n\u0131 bekle\n  wait_for:\n    port: \"{{ etcd_client_port }}\"\n    host: \"{{ ansible_host }}\"\n    state: started\n    delay: 5\n    timeout: 60\n  delegate_to: localhost\n  when: inventory_hostname == 'etcd-node1' # Sadece bir d\u00fc\u011f\u00fcmden kontrol edilebilir\n<\/code><\/pre>\n<h4><code>roles\/etcd\/templates\/etcd.service.j2<\/code><\/h4>\n<p>etcd i\u00e7in systemd servis dosyas\u0131n\u0131 bu \u015fablonu kullanarak olu\u015fturaca\u011f\u0131z. <code>ETCD_INITIAL_CLUSTER<\/code> de\u011fi\u015fkeni, Ansible&#8217;\u0131n Jinja2 yetenekleri kullan\u0131larak dinamik olarak olu\u015fturulacakt\u0131r.<\/p>\n<pre><code>[Unit]\nDescription=etcd - Highly-available key value store\nDocumentation=https:\/\/etcd.io\nAfter=network.target\n\n[Service]\nUser=etcd\nType=notify\nRestart=always\nRestartSec=5s\nLimitNOFILE=40000\n\nEnvironment=\"ETCD_DATA_DIR={{ etcd_data_dir }}\"\nEnvironment=\"ETCD_WAL_DIR={{ etcd_data_dir }}\/wal\"\nEnvironment=\"ETCD_NAME={{ inventory_hostname }}\"\nEnvironment=\"ETCD_LISTEN_PEER_URLS=https:\/\/{{ ansible_host }}:{{ etcd_peer_port }}\"\nEnvironment=\"ETCD_LISTEN_CLIENT_URLS=https:\/\/{{ ansible_host }}:{{ etcd_client_port }},http:\/\/127.0.0.1:2379\" # \u0130stemci i\u00e7in HTTPS ve localhost HTTP\nEnvironment=\"ETCD_ADVERTISE_CLIENT_URLS=https:\/\/{{ ansible_host }}:{{ etcd_client_port }}\"\nEnvironment=\"ETCD_INITIAL_ADVERTISE_PEER_URLS=https:\/\/{{ ansible_host }}:{{ etcd_peer_port }}\"\nEnvironment=\"ETCD_INITIAL_CLUSTER_TOKEN={{ etcd_initial_cluster_token }}\"\nEnvironment=\"ETCD_INITIAL_CLUSTER_STATE=new\"\n\n<h2>Peer TLS Yap\u0131land\u0131rmas\u0131<\/h2>\nEnvironment=\"ETCD_PEER_CLIENT_CERT_AUTH=true\"\nEnvironment=\"ETCD_PEER_TRUSTED_CA_FILE={{ etcd_ca_file }}\"\nEnvironment=\"ETCD_PEER_CERT_FILE={{ etcd_server_cert_file }}\"\nEnvironment=\"ETCD_PEER_KEY_FILE={{ etcd_server_key_file }}\"\n\n<h2>Client TLS Yap\u0131land\u0131rmas\u0131<\/h2>\nEnvironment=\"ETCD_CLIENT_CERT_AUTH=true\"\nEnvironment=\"ETCD_TRUSTED_CA_FILE={{ etcd_ca_file }}\"\nEnvironment=\"ETCD_CERT_FILE={{ etcd_server_cert_file }}\"\nEnvironment=\"ETCD_KEY_FILE={{ etcd_server_key_file }}\"\n\n<h2>Dinamik olarak initial cluster string olu\u015fturma<\/h2>\n{%- set initial_cluster_members = [] -%}\n{%- for host in groups['etcd_nodes'] -%}\n{%- set _ = initial_cluster_members.append(host + '=https:\/\/' + hostvars[host]['ansible_host'] + ':' + etcd_peer_port | string) -%}\n{%- endfor -%}\nEnvironment=\"ETCD_INITIAL_CLUSTER={{ initial_cluster_members | join(',') }}\"\n\nExecStart=\/usr\/local\/bin\/etcd\nExecReload=\/bin\/kill -HUP $MAINPID\nKillMode=process\n\n[Install]\nWantedBy=multi-user.target\n<\/code><\/pre>\n<p><strong>\u00d6nemli Not:<\/strong> <code>ETCD_LISTEN_CLIENT_URLS<\/code> i\u00e7inde <code>http:\/\/127.0.0.1:2379<\/code> ekledik. Bu, \u00f6zellikle Kubernetes gibi i\u00e7 servislerin etcd&#8217;ye ba\u011flan\u0131rken ek yap\u0131land\u0131rma gerektirmeden localhost \u00fczerinden HTTP ile ba\u011flanabilmesi i\u00e7in yayg\u0131n bir pratiktir. E\u011fer tam g\u00fcvenlik istiyorsan\u0131z bu sat\u0131r\u0131 kald\u0131rabilirsiniz, ancak o zaman t\u00fcm istemcilerin TLS ile ba\u011flanmas\u0131 gerekecektir.<\/p>\n<h4><code>roles\/etcd\/handlers\/main.yml<\/code><\/h4>\n<p>Servis de\u011fi\u015fiklikleri i\u00e7in handler tan\u0131mlayal\u0131m.<\/p>\n<pre><code>---\n- name: systemd daemon-reload\n  systemd:\n    daemon_reload: yes\n  become: yes\n\n- name: etcd servisini yeniden ba\u015flat\n  systemd:\n    name: etcd\n    state: restarted\n  become: yes\n<\/code><\/pre>\n<h3>Ansible Playbook&#8217;u \u00c7al\u0131\u015ft\u0131rma<\/h3>\n<p>T\u00fcm dosyalar\u0131 olu\u015fturduktan sonra, Ansible kontrol makinenizden a\u015fa\u011f\u0131daki komutu \u00e7al\u0131\u015ft\u0131rarak etcd k\u00fcmesini da\u011f\u0131tabilirsiniz:<\/p>\n<pre><code>ansible-playbook -i inventory\/hosts.ini playbook.yml\n<\/code><\/pre>\n<p>Ansible, her bir etcd d\u00fc\u011f\u00fcm\u00fcne ba\u011flanacak, etcd ikili dosyalar\u0131n\u0131 indirecek, sertifikalar\u0131 kopyalayacak, systemd servis dosyas\u0131n\u0131 yap\u0131land\u0131racak ve etcd servisini ba\u015flatacakt\u0131r.<\/p>\n<h3>K\u00fcme Do\u011frulama ve G\u00fcvenli\u011fi Test Etme<\/h3>\n<p>Kurulum tamamland\u0131ktan sonra, etcd k\u00fcmesinin sa\u011fl\u0131kl\u0131 bir \u015fekilde \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 ve TLS&#8217;nin do\u011fru yap\u0131land\u0131r\u0131ld\u0131\u011f\u0131n\u0131 do\u011frulamam\u0131z gerekir.<\/p>\n<h4>etcdctl ile K\u00fcme Sa\u011fl\u0131\u011f\u0131n\u0131 Kontrol Etme<\/h4>\n<p>etcdctl arac\u0131n\u0131 kullanarak k\u00fcme \u00fcyelerini ve sa\u011fl\u0131k durumunu kontrol edebiliriz. TLS etkin oldu\u011fu i\u00e7in sertifika yollar\u0131n\u0131 belirtmemiz gerekmektedir:<\/p>\n<pre><code># etcdctl'i bir etcd d\u00fc\u011f\u00fcm\u00fcnde veya client sertifikalar\u0131na sahip bir makinede \u00e7al\u0131\u015ft\u0131r\u0131n\n<h2>etcdctl'in kurulu oldu\u011fundan emin olun (Ansible rol\u00fc kurar)<\/h2>\n\nexport ETCDCTL_API=3\nexport ETCDCTL_CACERT={{ etcd_ssl_dir }}\/ca.pem\nexport ETCDCTL_CERT={{ etcd_ssl_dir }}\/client.pem\nexport ETCDCTL_KEY={{ etcd_ssl_dir }}\/client-key.pem\n\n<h2>K\u00fcme \u00fcyelerini listele<\/h2>\netcdctl member list --endpoints=https:\/\/192.168.1.101:2379,https:\/\/192.168.1.102:2379,https:\/\/192.168.1.103:2379\n\n<h2>K\u00fcme sa\u011fl\u0131k durumunu kontrol et<\/h2>\netcdctl endpoint health --endpoints=https:\/\/192.168.1.101:2379,https:\/\/192.168.1.102:2379,https:\/\/192.168.1.103:2379\n<\/code><\/pre>\n<p>Beklenen \u00e7\u0131kt\u0131, t\u00fcm \u00fcyelerin durumunu, <code>isLeader=true<\/code> olan bir lideri ve t\u00fcm u\u00e7 noktalar\u0131n <code>healthy<\/code> oldu\u011funu g\u00f6stermelidir.<\/p>\n<h4>Veri Yazma ve Okuma Testi<\/h4>\n<p>K\u00fcmenin veri depolama yetene\u011fini test edelim:<\/p>\n<pre><code># Bir anahtar-de\u011fer \u00e7ifti yaz\netcdctl put mykey \"Hello etcd cluster!\"\n\n<h2>De\u011feri oku<\/h2>\netcdctl get mykey\n<\/code><\/pre>\n<p>Bu komutlar ba\u015far\u0131l\u0131 olursa, etcd k\u00fcmeniz do\u011fru bir \u015fekilde \u00e7al\u0131\u015f\u0131yor demektir.<\/p>\n<h3>Sonu\u00e7 ve S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h3>\n<p>Bu rehberde, etcd k\u00fcmesini Ansible kullanarak Ubuntu 18.04 \u00fczerinde nas\u0131l kuraca\u011f\u0131m\u0131z\u0131 ve TLS ile g\u00fcvenli\u011fini nas\u0131l sa\u011flayaca\u011f\u0131m\u0131z\u0131 \u00f6\u011frendik. Ansible&#8217;\u0131n otomasyon yetenekleri sayesinde, tekrarlanabilir ve tutarl\u0131 bir da\u011f\u0131t\u0131m s\u00fcreci elde ettik. TLS sertifikalar\u0131 kullanarak hem istemci-sunucu hem de d\u00fc\u011f\u00fcm-d\u00fc\u011f\u00fcm ileti\u015fimini \u015fifreledik ve kimlik do\u011frulamas\u0131n\u0131 sa\u011flad\u0131k, b\u00f6ylece hassas yap\u0131land\u0131rma verilerinizin g\u00fcvenli\u011fini art\u0131rd\u0131k.<\/p>\n<h4>S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h4>\n<ol>\n<li><strong>S: etcd k\u00fcmesi neden ba\u015flam\u0131yor veya k\u00fcme \u00fcyesi olarak g\u00f6r\u00fcnm\u00fcyor?<\/strong>\n<p><strong>C:<\/strong> En yayg\u0131n nedenler \u015funlard\u0131r:<\/p>\n<ul>\n<li><strong>G\u00fcvenlik Duvar\u0131:<\/strong> 2379 ve 2380 portlar\u0131n\u0131n t\u00fcm etcd d\u00fc\u011f\u00fcmleri aras\u0131nda a\u00e7\u0131k oldu\u011fundan emin olun.<\/li>\n<li><strong>Sertifika Sorunlar\u0131:<\/strong> Sertifikalar\u0131n do\u011fru olu\u015fturuldu\u011fundan, do\u011fru yollara kopyaland\u0131\u011f\u0131ndan ve izinlerinin (\u00f6zellikle anahtar dosyalar\u0131n\u0131n) k\u0131s\u0131tl\u0131 oldu\u011fundan emin olun. etcd g\u00fcnl\u00fcklerini kontrol edin (<code>journalctl -u etcd<\/code>).<\/li>\n<li><strong>Hostname\/IP E\u015fle\u015fmesi:<\/strong> Sertifikalardaki CN\/SAN de\u011ferlerinin d\u00fc\u011f\u00fcm\u00fcn hostname ve IP adresleriyle e\u015fle\u015fti\u011finden emin olun. <code>\/etc\/hosts<\/code> dosyas\u0131n\u0131n do\u011fru yap\u0131land\u0131r\u0131ld\u0131\u011f\u0131n\u0131 kontrol edin.<\/li>\n<li><strong><code>ETCD_INITIAL_CLUSTER<\/code> Yanl\u0131\u015f Yap\u0131land\u0131r\u0131lmas\u0131:<\/strong> Bu de\u011fi\u015fkenin t\u00fcm k\u00fcme \u00fcyelerini do\u011fru IP adresleri ve portlarla listeledi\u011finden emin olun.<\/li>\n<\/ul>\n<\/li>\n<li><strong>S: <code>etcdctl<\/code> komutu &#8220;connection refused&#8221; hatas\u0131 veriyor, ne yapmal\u0131y\u0131m?<\/strong>\n<p><strong>C:<\/strong> Bu genellikle iki nedenden kaynaklan\u0131r:<\/p>\n<ul>\n<li>etcd servisi \u00e7al\u0131\u015fm\u0131yor veya do\u011fru portu dinlemiyor. (<code>systemctl status etcd<\/code> ile kontrol edin).<\/li>\n<li>G\u00fcvenlik duvar\u0131 (<code>ufw<\/code>) <code>etcdctl<\/code>&#8216;in ba\u011flanmaya \u00e7al\u0131\u015ft\u0131\u011f\u0131 portu (varsay\u0131lan 2379) engelliyor.<\/li>\n<li>TLS yap\u0131land\u0131rmas\u0131 yanl\u0131\u015f. <code>ETCDCTL_CACERT<\/code>, <code>ETCDCTL_CERT<\/code>, <code>ETCDCTL_KEY<\/code> ortam de\u011fi\u015fkenlerinin veya <code>--cacert<\/code>, <code>--cert<\/code>, <code>--key<\/code> arg\u00fcmanlar\u0131n\u0131n do\u011fru ayarland\u0131\u011f\u0131ndan emin olun.<\/li>\n<\/ul>\n<\/li>\n<li><strong>S: Yeni bir etcd d\u00fc\u011f\u00fcm\u00fcn\u00fc mevcut bir k\u00fcmeye nas\u0131l eklerim?<\/strong>\n<p><strong>C:<\/strong> Yeni bir d\u00fc\u011f\u00fcm eklemek, mevcut bir k\u00fcmede <code>etcdctl member add<\/code> komutuyla yap\u0131l\u0131r, ard\u0131ndan yeni d\u00fc\u011f\u00fcm\u00fcn <code>ETCD_INITIAL_CLUSTER_STATE<\/code> de\u011feri <code>existing<\/code> olarak ayarlan\u0131r. Bu rehberde sadece ilk kurulum ele al\u0131nd\u0131 ancak bu, etcd&#8217;nin operasyonel karma\u015f\u0131kl\u0131klar\u0131ndan biridir ve ayr\u0131 bir Ansible rol\u00fc veya playbook gerektirebilir.<\/p>\n<\/li>\n<li><strong>S: Ubuntu 18.04 yerine ba\u015fka bir s\u00fcr\u00fcm kullanabilir miyim?<\/strong>\n<p><strong>C:<\/strong> Evet, Ansible rol\u00fc b\u00fcy\u00fck \u00f6l\u00e7\u00fcde da\u011f\u0131t\u0131m ba\u011f\u0131ms\u0131zd\u0131r. Ancak <code>apt<\/code> mod\u00fcl\u00fc yerine <code>yum<\/code> veya <code>dnf<\/code> gibi uygun paket y\u00f6neticilerini kullanmak ve systemd yollar\u0131n\u0131n do\u011fru oldu\u011fundan emin olmak i\u00e7in k\u00fc\u00e7\u00fck de\u011fi\u015fiklikler yapman\u0131z gerekebilir. etcd ikili dosyalar\u0131 Linux da\u011f\u0131t\u0131mlar\u0131 aras\u0131nda genellikle uyumludur.<\/p>\n<\/li>\n<\/ol>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"etcd K\u00fcmesini Ansible ile Ubuntu 18.04 \u00dczerinde Kurma ve G\u00fcvenli\u011fini Sa\u011flama\nGiri\u015f\nDa\u011f\u0131t\u0131k sistemlerde yap\u0131land\u0131rma y\u00f6netimi ve servis","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":[1468],"tags":[],"class_list":{"0":"post-33737","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-ubuntu","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>etcd K\u00fcmesini Ansible ile Ubuntu 18.04 \u00dczerinde Kurma ve G\u00fcvenli\u011fini Sa\u011flama - 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\/etcd-kumesini-ansible-ile-ubuntu-18-04-uzerinde-kurma-ve-guvenligini-saglama\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"etcd K\u00fcmesini Ansible ile Ubuntu 18.04 \u00dczerinde Kurma ve G\u00fcvenli\u011fini Sa\u011flama\" \/>\n<meta property=\"og:description\" content=\"etcd K\u00fcmesini Ansible ile Ubuntu 18.04 \u00dczerinde Kurma ve G\u00fcvenli\u011fini Sa\u011flama Giri\u015f Da\u011f\u0131t\u0131k sistemlerde yap\u0131land\u0131rma y\u00f6netimi ve servis\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/etcd-kumesini-ansible-ile-ubuntu-18-04-uzerinde-kurma-ve-guvenligini-saglama\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-06T09:41:41+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\/etcd-kumesini-ansible-ile-ubuntu-18-04-uzerinde-kurma-ve-guvenligini-saglama\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/etcd-kumesini-ansible-ile-ubuntu-18-04-uzerinde-kurma-ve-guvenligini-saglama\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"etcd K\u00fcmesini Ansible ile Ubuntu 18.04 \u00dczerinde Kurma ve G\u00fcvenli\u011fini Sa\u011flama\",\"datePublished\":\"2025-11-06T09:41:41+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/etcd-kumesini-ansible-ile-ubuntu-18-04-uzerinde-kurma-ve-guvenligini-saglama\/\"},\"wordCount\":1369,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Ubuntu\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/etcd-kumesini-ansible-ile-ubuntu-18-04-uzerinde-kurma-ve-guvenligini-saglama\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/etcd-kumesini-ansible-ile-ubuntu-18-04-uzerinde-kurma-ve-guvenligini-saglama\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/etcd-kumesini-ansible-ile-ubuntu-18-04-uzerinde-kurma-ve-guvenligini-saglama\/\",\"name\":\"etcd K\u00fcmesini Ansible ile Ubuntu 18.04 \u00dczerinde Kurma ve G\u00fcvenli\u011fini Sa\u011flama - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-11-06T09:41:41+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/etcd-kumesini-ansible-ile-ubuntu-18-04-uzerinde-kurma-ve-guvenligini-saglama\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/etcd-kumesini-ansible-ile-ubuntu-18-04-uzerinde-kurma-ve-guvenligini-saglama\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/etcd-kumesini-ansible-ile-ubuntu-18-04-uzerinde-kurma-ve-guvenligini-saglama\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"etcd K\u00fcmesini Ansible ile Ubuntu 18.04 \u00dczerinde Kurma ve G\u00fcvenli\u011fini Sa\u011flama\"}]},{\"@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":"etcd K\u00fcmesini Ansible ile Ubuntu 18.04 \u00dczerinde Kurma ve G\u00fcvenli\u011fini Sa\u011flama - 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\/etcd-kumesini-ansible-ile-ubuntu-18-04-uzerinde-kurma-ve-guvenligini-saglama\/","og_locale":"tr_TR","og_type":"article","og_title":"etcd K\u00fcmesini Ansible ile Ubuntu 18.04 \u00dczerinde Kurma ve G\u00fcvenli\u011fini Sa\u011flama","og_description":"etcd K\u00fcmesini Ansible ile Ubuntu 18.04 \u00dczerinde Kurma ve G\u00fcvenli\u011fini Sa\u011flama Giri\u015f Da\u011f\u0131t\u0131k sistemlerde yap\u0131land\u0131rma y\u00f6netimi ve servis","og_url":"https:\/\/fatihsoysal.com\/blog\/etcd-kumesini-ansible-ile-ubuntu-18-04-uzerinde-kurma-ve-guvenligini-saglama\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-11-06T09:41:41+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\/etcd-kumesini-ansible-ile-ubuntu-18-04-uzerinde-kurma-ve-guvenligini-saglama\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/etcd-kumesini-ansible-ile-ubuntu-18-04-uzerinde-kurma-ve-guvenligini-saglama\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"etcd K\u00fcmesini Ansible ile Ubuntu 18.04 \u00dczerinde Kurma ve G\u00fcvenli\u011fini Sa\u011flama","datePublished":"2025-11-06T09:41:41+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/etcd-kumesini-ansible-ile-ubuntu-18-04-uzerinde-kurma-ve-guvenligini-saglama\/"},"wordCount":1369,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Ubuntu"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/etcd-kumesini-ansible-ile-ubuntu-18-04-uzerinde-kurma-ve-guvenligini-saglama\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/etcd-kumesini-ansible-ile-ubuntu-18-04-uzerinde-kurma-ve-guvenligini-saglama\/","url":"https:\/\/fatihsoysal.com\/blog\/etcd-kumesini-ansible-ile-ubuntu-18-04-uzerinde-kurma-ve-guvenligini-saglama\/","name":"etcd K\u00fcmesini Ansible ile Ubuntu 18.04 \u00dczerinde Kurma ve G\u00fcvenli\u011fini Sa\u011flama - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-11-06T09:41:41+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/etcd-kumesini-ansible-ile-ubuntu-18-04-uzerinde-kurma-ve-guvenligini-saglama\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/etcd-kumesini-ansible-ile-ubuntu-18-04-uzerinde-kurma-ve-guvenligini-saglama\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/etcd-kumesini-ansible-ile-ubuntu-18-04-uzerinde-kurma-ve-guvenligini-saglama\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"etcd K\u00fcmesini Ansible ile Ubuntu 18.04 \u00dczerinde Kurma ve G\u00fcvenli\u011fini Sa\u011flama"}]},{"@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\/33737","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=33737"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/33737\/revisions"}],"predecessor-version":[{"id":33738,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/33737\/revisions\/33738"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=33737"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=33737"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=33737"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}