Private EKS cluster kurarak Cloudflare Zero Trust ile güvenlik sağladım. Bu cluster’larımı güvence altına almanın harika bir yolu oldu. Deneyimlerimi ve karşılaştığım zorlukları paylaşmanın yararlı olacağını düşündüm.

Yapacağımız İşlemler

  1. Cloudflare account ve Zero Trust Team oluşturma
  2. Private EKS cluster oluşturma (kendi VPC’sinde, private olarak configure)
  3. Cloudflare Tunnel client ile public EC2 bastion kurulumu
  4. EKS control plane security group configure etme
  5. Cloudflare Zero Trust tunnel ve policy’leri configure etme
  6. WARP client install ve device enrollment
  7. Private cluster connectivity test

Cloudflare Account ve Zero Trust Team Oluşturma

Cloudflare account oluştur
https://dash.cloudflare.com/ adresine git ve ücretsiz account oluştur.

Zero Trust account kurulumu
Dashboard içinde Zero Trust account oluştur. Bu tutorial için free plan yeterli. Kurulum sırasında team oluşturman istenecek. Team adını hatırladığından emin ol – WARP Zero Trust client ile login olurken gerekecek.

Private EKS Cluster Oluşturma

Gerçekten basit bir cluster oluşturacağız. Proof of concept için kullandığım cluster configuration dosyası:

apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig

metadata:
  name: vpn-eks-cluster
  region: us-east-1

vpc:
  clusterEndpoints:
    publicAccess: true # temp: on for bootstrap
    privateAccess: true
nodeGroups:
  - name: t2micro-nodes
    instanceType: t2.micro
    desiredCapacity: 1
    minSize: 1
    maxSize: 1

Oluşturmak için şu komutu çalıştır:

eksctl create cluster -f private-eks-cluster.yaml

Bu kendi VPC’si olan basit ve ekonomik tek-node cluster oluşturur. Default VPC kullanmamak daha iyi — yeni bir tane oluşturmak default setup’ı riske atmaktan çok daha temiz.

Şimdi cluster’ı private yapalım ki sadece yeni VPC’mizin private subnet’lerini kullansın ve VPC dışından erişilebilir olmasın.

eksctl utils update-cluster-vpc-config \
  --cluster <YOUR_CLUSTER_NAME> --region <YOUR_CLUSTER_REGION>\
  --private-access=true --public-access=false --approve

Cluster’ın private olduğundan emin olmak için şunu çalıştırabilirsin:

aws eks describe-cluster --region <YOUR_CLUSTER_REGION> --name <YOUR_CLUSTER_NAME>\
  --query "cluster.resourcesVpcConfig.{Public:endpointPublicAccess,Private:endpointPrivateAccess}"

Public EC2 Bastion Kurulumu

AWS account’umuzda EKS cluster ile aynı VPC’de public EC2 instance oluşturabiliriz. Bunun için EC2’ye git ve Launch Instance‘a tıkla.

Amazon Linux seç:

Amazon Linux Instance Selection

Instance Type seç:

image 14

Private cluster’ınla aynı VPC’yi seçtiğinden emin ol:

private eks

Her şey tamam, şimdi çalıştır ve yeni instance’ına SSH ile bağlan…

Bağlandıktan sonra bir sonraki adım Cloudflare client install etmek:

# Download the Linux AMD64 binary
curl -L -o cloudflared https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64

# Make it executable
chmod +x cloudflared

# Move it to /usr/local/bin
sudo mv cloudflared /usr/local/bin/

# Verify
cloudflared --version

EC2 instance’ına Cloudflare client install ettikten sonra tunnel oluşturabiliriz. Ama önce Cloudflare ile authenticate olmamız gerekiyor. Account’un yoksa cloudflare.com‘a git ve oluştur.

cloudflared tunnel login

Bu komutu terminal’de çalıştırdığında URL yazdıracak. Bu URL’yi kopyala ve Cloudflare ile authenticate olmak için kullan. Authentication’dan sonra client’ın bundan sonra authentication için kullanacağı certificate download edilecek.

Authenticate olduktan sonra tunnel oluşturabiliriz:

cloudflared tunnel create eks-cluster-tunnel

Bu tunnel’ın ID’sini döndürür, tunnel oluşturulduğunu gösterir. Şimdi tunnel’ı EKS API’sini expose edecek şekilde configure etmemiz gerekiyor. Bunun için /etc/cloudflared/config.yml altında config.yml oluşturmamız gerekiyor:

# create directory
sudo mkdir -p /etc/cloudflared
# creates config file
sudo nano /etc/cloudflared/config.yml

config.yml içine yaz:

tunnel: eks-cluster-tunnel
credentials-file: /home/ubuntu/.cloudflared/<tunnel-id>.json

ingress:
  # This maps your Cloudflare hostname to your private EKS API endpoint
  - hostname: eks-api.example.com
    service: https://<private-EKS-API-endpoint>:443
    originRequest:
      # Ensures TLS works even if the endpoint uses a self-signed cert
      noTLSVerify: true
  # Default fallback rule
  - service: http_status:404

Private-EKS-API URL’inizi almak için AWS client kullanarak cluster’ı describe edebiliriz:

aws eks describe-cluster \
    --name <cluster-name> \
    --region <cluster-region>\
    --query "cluster.endpoint" \
    --output text

Configuration’a sahip olduğumuzda tunnel’ı çalıştırabiliriz:

cloudflared tunnel run eks-cluster-tunnel

Her şey çalışırsa tunnel’ın düzgün çalıştığından emin olmak için service oluşturup başlatabiliriz:

sudo cloudflared service install
sudo systemctl enable cloudflared
sudo systemctl start cloudflared

Cloudflare account’umuzda her şeyi verify edebiliriz. Dashboard’a login ol, Zero Trust‘a git ve Zero Trust Dashboard’da Network tab’ını aç ve Tunnels‘a tıkla. Tunnel’ının listelendiğini ve status’unun Healthy gösterildiğini göreceksin.

image 16

EC2 bastion instance’ından her şey neredeyse hazır. Ama önce instance’ımızın EKS endpoint’e ulaşabildiğini doğrulamamız etmemiz gerekiyor. Bunun için control plane’in security group’unu edit etmemiz gerekiyor.

EKS cluster dashboard’ına git, Networking‘e tıkla ve Cluster security group‘u seç.

EKS Cluster Security Group

Inbound rules‘ı edit et ve bastion’ın security group’unun connect olmasına izin veren HTTPS (port 443) için rule ekle.

Security Group Inbound Rules

Şimdi EC2 bastion’a SSH ile bağlan ve EKS endpoint’e ulaşabildiğini doğrula:

curl -4 -vk https://my_eks_endpoint

Kubernetes API’sinden response alıp almadığını kontrol etmek için bu komutu çalıştırabilirsin, output şöyle görünmeli:

image 17

Cloudflare Configuration

Bu demo’da Cloudflare’de domain setup yapmadık çünkü domain’imiz başka yerde manage ediliyor. Domain set’imiz olmadığından https://my_eks_endpoint‘in resolve ettiği IP’ye route oluşturacağız.

IP’yi almak için şunu çalıştır:

route get <my_eks_endpoint>

Şöyle bir sonuç vermeli:

route to: 192.168.93.51
destination: 192.168.93.51

Adres 192.168.93.51‘e resolve oluyor. Tunnel’ımızın bu endpoint’e traffic route edebilmesini sağlamak için private network’ünü tunnel configuration’a dahil etmemiz gerekiyor.

image 18

Özellikle CIDR block 192.168.93.0/24 ekleyeceğiz, bu 192.168.93.1’den 192.168.93.254’e kadar tüm range’i kapsar. Bu 192.168.93.51 dahil o subnet’teki tüm muhtemel host’ların tunnel üzerinden erişilebilir olmasını garanti eder.

image 19

Şimdi tunnel’ımız https://my_eks_endpoint‘den resolve address’i route edecek.

WARP Installation ve Configuration

Neredeyse bitti! Cloudflare’de son adım device’ınızı private network’e bağlamak. Bunun için Zero Trust → Networks → Overview‘a git, sonra Connect a device to a private network altında Add a device‘a tıkla.

image 20
  1. Makinene WARP install et
  2. Enrollment policy tanımla, enroll etmek istediğin email’leri ekle
image 21

3. Service mode seç, Both Traffic and DNS (önerilen) seçiyoruz

4. Default routing’i Include mode‘a set ediyoruz, böylece sadece spesifik address range’ler WARP üzerinden route edilir. 192.168.93.0/24‘ü bu listeye ekleyeceğiz.

5. Split tunnel’lar için configuration’ın şöyle göründüğünden emin oluyoruz:

image 22

Complete edip continue ediyoruz.

Şimdi makinene git ve WARP’ı aç. Şimdi yapmak istediğimiz ZeroTrust’ta authenticate olmak. Mac’te WARP icon’u ekranın üstündeki menu bar‘da görünecek.

image 23

Icon’a tıkla ve WARP window’u görünecek:

image 24

Setting icon’una tıkla ve Preferences’a tıklayıp account tab’ına git.

image 25

Login to Cloudflare Zero Trust’a tıkla, Zero Trust team’ini gir ve talimatları takip et. Zero Trust’a başarıyla login olduktan sonra WARP client’ı tekrar aç ve Connect‘e tıkla.

image 26

Artık bağlandın ve private EKS cluster‘a yapılan tüm istekler güvenli şekilde Cloudflare üzerinden private EKS control plane’ine route edilecek.

Sonuç

Cloudflare Zero Trust WARP ile private EKS cluster güvenliği sağlamak modern DevSecOps süreçlerinde kritik öneme sahip. Bu setup sayesinde VPN karmaşası olmadan güvenli erişim sağlayabilir, Zero Trust Network Access (ZTNA) prensiplerini uygulayabilirsiniz.

Cloudflare tunnel kullanarak private Kubernetes control plane’e güvenli erişim sağlarken, WARP client ile user device’larından kesintisiz bağlantı elde ediyorsunuz. Bu architecture pattern özellikle remote work environment’larda ve multi-cloud deployment’larda büyük avantaj sağlıyor.

Network security’yi geleneksel firewall rule’larından Zero Trust model’e geçirmek için bu kapsamlı uygulama bir başlangıç noktası sunuyor. Production environment’larda bu pattern’i scale ederken ek güvenlik layer’ları ve monitoring solution’larını da entegre etmeyi unutmayın.

Daha fazla bilgi için Cloudflare Zero Trust dokümantasyonunu ve AWS EKS dokümantasyonunu inceleyebilirsiniz.

İlginiz çekerse SRE/DevOps Engineer’lar Neden Claude Code Kullanmalı? yazıma da göz gezdirebilirsiniz.