Istio ile TLS Sertifikalarımı Nasıl Yönetirim?

Henüz Let’s Encrypt gibi, ücretsiz TLS sertifikaları üreten ve periyodik olarak yenileyen — dolayısıyla hem zamandan hem de bütçeden tasarruf sağlayan — sistemleri henüz kullan(a)mıyorsanız, sertifika isteme/temin etme ve uygulama adımlarında geleneksel yöntemleri izliyor olmanız olası. Bu “el feneri” yazısında da Istio Gateway ile yönettiğimiz trafiği güvenli hale getirmek için izlememiz gereken yolu tarif etmeye çalışacağım.

Istio — Trafik Yönetimi

Kısayola geçmeden önce genel bilgi mahiyetinde, Istio’nun trafiği yönetmek için kurguladığı mimariden bahsetmekte fayda var.

OSI (Open Systems Interconnection) modeline göre; trafiğin hangi protokolde gerçekleşeceği (TCP, UDP, RDP, SCTP, vb.), ne kadar veri taşınacağı, verinin nereye taşınacağı (Layer 4 — Transport); bahsi geçen trafikteki istemci ve sunucu arasındaki iletişimin koordinasyonu —örneğin; cevabın gelmesi için ne kadar beklemeliyim? — (Layer 5 — Session) ve trafikteki verinin nasıl görüneceği —örneğin; verinin şifrelenmesi/şifrelenmiş verinin çözülmesi — (Layer 6 — Presentation) operasyonlarından sorumlu Gateway iken önceki seviyelerde çözülen trafiğin içeriğine göre kullanıcı ve uygulama arasındaki etkileşimden — örneğin; bu gelen isteği hangi uygulamaya yönlendirmeliyim — (Layer 7 — Application) Virtual Service sorumludur.

Şöyle örnekleyelim;

Yukarıdaki Gateway tanımına göre http://selcukusta.com , http://www.selcukusta.com , https://selcukusta.com ve https://www.selcukusta.com adreslerine gelecek tüm istekler bu gateway üzerinden geçecek; ayrıca http trafikleri https’e zorunlu olarak yönlendirilecek. Ayrıca https trafiği için de son iki satırda yolu belirtilen TLS sertifikaları kullanılacak.

Layer 4–6 arasındaki tanımı yaptık ancak istemci ile uygulama arasındaki etkileşim için (Layer 7) bir tanıma daha ihtiyacımız var:

Bunun için de yukarıdaki Virtual Service’i tanımlıyoruz. Bahsi geçen URL’lere gelen isteklerin tamamını personal-website-ui isimli ve 80 numaralı portu dinleyen ClusterIP olarak expose edilmiş Kubernetes Service’ine yönlendiriyoruz.

Peki sertifika üretme/tanımlama işlemini nasıl gerçekleştireceğiz? Gelin, yazının ana konusuna geri dönelim.

Istio Gateway — TLS

Yukarıdaki Gateway örneğinin son iki satırına dem vurmuştuk. Yazının girişinde bahsettiğim Let’s Encrypt — veya benzeri — uygulamaları kullanıyorsanız cert-manager adlı araç ile tüm bu sertifika süreçlerini otomatize etmeniz mümkün. Bu konu başka bir yazının konusu olabileceği için detaya girmemekle birlikte, referans olarak kullanabileceğiniz dokümantasyonu buraya eklemekte bir engel görmüyorum.

Ancak geleneksel süreçlerle bu işi yönetiyorsanız;

  • Öncelikle bir CSR (Certificate Signing Request) oluştur.
  • Bu CSR’ı SSL hizmeti aldığın firmaya teslim et.
  • Firmadan gelen sertifika içerikli dosyayı aç.
  • Tüm sertifikaları bundle et (root cert, intermediate cert #1, intermediate cert #2, intermediate cert #N, own cert).
  • Binding işlemini gerçekleştir.

aşağıdaki işlemleri yapmanız gerekli olacaktır.

Yukarıdaki işlemler tamamlandıktan sonra, Gateway tanımına gitmek ve 28./29. satırlardaki /etc/istio/ingressgateway ile başlayan yerlerdeki klasör isimlerini tls-patch.json dosyasındaki isimlerle değiştirmek ve dosya değişikliğini uygulamak yeterli.

En son aşamada https://decoder.link/sslchecker/ veya benzeri hizmeti sağlayan bir site üzerinden sertifika durumunu kontrol edebilirsiniz.

Chain Issues olarak belirtilen bölümde bir sorun olmamasına dikkat etmenizi öneririm. Eğer root ve intermediate sertifikalarla bir bundle işlemi gerçekleştirmeden sertifikanızı mount ettiyseniz, bazı tarayıcılarda siteniz “Güvensiz” olarak işaretlenecektir.

Software Development Manager (at) Rasyotek. Former trainer & consultant. Family member of C# and Python. Newbie on Unix. Articles are mostly about coding.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store