Sürekli İntegra ve Sürekli İşbirlikleri (CI/CD) hizmet yapısı mimarileri ile ilgili olarak, CI /CD boru hatlarının bir hizmet ağıyla entegrasyonu, mimari kararları kapsayan, boru hattı tasarımı, gelişmiş dağıtım stratejileri, ve üretimde başarılı olmak için gerekli olan yüzlerce hizmetle ilgili değişikliklerle ilgili kapsamlı ve pratik bir kılavuz haline gelmiştir.

Bir Servis Meşru Nedir ve Neden CI /CD için Önemlidir

Bir servis sayfası, her hizmet örneği ile birlikte bir yankar proxy olarak dağıtılır, yükleme, servis keşif, doğrulama, yetkilendirme ve gözlemlenebilirlik sağlayan bir ağ oluşturmak.

CI/CD için, hizmet ağı, temel trafik yönetimi için yük dengelemek için doğrudan güncelleştirilmiş hizmet örneklerini içeren, kanallarını manipüle edebilen güçlü bir kontrol uçağı temsil eder ve ağ seviyesindeki trafik artışlarını engelleyebilir - tüm uygulama koduna dokunmadan.

CI/CD için vazgeçilmez bir hizmet ağı oluşturan temel yetenekler şunlardır:

  • [FONT:0]Traffic bölme[[Dönetici: 1) - Trafikin bir yüzdesinin kanary test için yeni bir sürüme doğru yollayın.
  • [FONT=0)Request- level routing[[Dönetici: 1 ) – Doğrudan özel başlıklar, kurabiyeler veya belirli versiyonlarına yollar (öner tabanlı routing).
  • [FONT:0]Circuit kırılma ve yeniden birleşme[Dönler: 1 ) - Kötü bir dağıtım sırasında alt ağ hizmetleri koruyun.
  • [FONT:0)Mutual TLS (mTLS)) – Otomatik olarak şifre ve hizmet içi iletişim, sıfır güven güvenliğini basitleştirmek.
  • [FONT:0]Fine-grained observability[Dönetici: 1) Her hizmet etkileşiminden Telemetri, dağıtım sağlığı konusunda acil geri bildirimler sağlar.

CI/CD'yi bir Servis Meşru ile bütünleştirmenin temel Faydaları

Uygulamaya girmeden önce, bu iki tabakayı birleştirerek ne elde ettiğinizi anlamanıza yardımcı olur:

  • [FONT:0]Safer dağıtımları[[Dönetici: 1 ) – Canary, mavi-yeşil ve A / B testi ağ haline getirilir; geri dönüşler trafik geri yükleme yoluyla anında yapılır.
  • [FONT:0] Endişelenme kaygıları [[Döneticiler)[[Döneticiler)[FONT:0))
  • [FONT:0]Konsist güvenlik politikaları[Dönetici: 1) Otomatik kimlik doğrulama, yetkilendirme ve dağıtım hattının bir parçası olarak şifreleme.
  • [FONT:0)Cycle zaman azaltımı[[Dönetici: 1 ) – Otomatik kanary analiz ve sağlık, üretim sürümleri için gerekli olan manuel gating azaltır.
  • [FONT:0]Gbservability at ölçek[Dönetici: 1 ) - Her hizmet ağ dağıtım metrikleri, logları ve birleşik bir gözlemlenebilirlik yığınına izler, anomalilerin hızlı bir şekilde tespit edilmesine izin verir.

Önlemler Önlemler

CI/CD'yi bir hizmet ağı ile entegre etmek için ihtiyacınız var:

  • A Kubernetes kümesi (veya yankar enjeksiyonu destekleyen bir konteyner orkestrası, Istio ile Nomad gibi).
  • Bir hizmet ağı kuruldu (Istio, Linkerd, Konsolos Connect veya Open Service Mesh).
  • CI/CD aracı (Jenkins, GitLab CI, GitHub Actions, ArgoCD, Flux, Spinnaker).
  • Tüm konfigürasyonlar için sürüm kontrolü (örneğin, ağ politikaları ve boru hatları tanımları).

Bu makaledeki örnekler Istio ve Kubernetes, ancak desenler trafik routing ve politika uygulamaları sağlayan herhangi bir hizmet ağlarına uygulanır.

Adım-by-Step Integration Guide

1. Hizmet Meşruyu kurmak ve yapılandırın

Bir hizmet örgü seçin ve kümenize yükleyin. For Istio, standart kurulum kullanımları [FONTD:0] komut satırı aracı veya Helm grafiği. Önemli ilk yapılandırma adımları şunlardır:

  • Mikro hizmetlerinizi barındıran isim alanları için otomatik yankar enjeksiyonunu sağlayın.
  • Dış trafik için Ingress Gateway'ı kurmak.
  • Ortamı küresel mTLS'ye (prodüksiyon için uçmuş) izin vermek için yapılandırın.
  • Pasajı yönetmek için bir temel Gateway ve Sanal Servis kaynakları oluşturmak.

Tüm bu konfigürasyonlar, altyapı kodunuzun (IaC) hattının bir parçası olarak bir Git havuzunda depolanmalıdır.Istio installation üzerinde daha fazla ayrıntı için, [[0) resmi Istio yükleme belgesi).

2. CI/CD Boruunuzu Meşru için yeniden yükleyin

Bir servis ağı ile entegre edilen tipik bir CI/CD boru hattı üç ayrı aşamaya sahiptir:

  • [FONT:0)Yap ve Test[Dönetici, hizmet, koşu ünitesi ve entegrasyon testleri ve bir konteyner imajı üreterek, bu aşama örgü ile etkileşime girmez.
  • [FONT=0)İşletme Canary.[[Dönetici:0)İşletme Canary.[[Dönetici:0))) Mevcut stabil sürümle hizmet için yeni sürüme işe yarar. Kubernetes'te küçük sayıda replik ve farklı bir etiket (örneğin, d.g.g., 03.
  • [FONT:0)Promote veya Rollback.[[Dönetici:0) Tanımlanmış bir gözlem dönemi (veya otomatik ölçüm analizine dayanarak), ya da% 100 trafik için kanarya teşvik eder ve eski sürümü silerek veya daha önceki sürüme geri döner.

Aşağıda Istio kullanarak bir kanary salıveren bir GitHub Actions iş akış parçaları örneği:

jobs:
 deploy:
 runs-on: ubuntu-latest
 steps:
 - uses: actions/checkout@v3
 - name: Set up kubectl
 run: |
 # ... configure kubectl with cluster context
 - name: Deploy canary
 run: |
 kubectl apply -f k8s/deployment-canary.yaml
 kubectl apply -f istio/virtualservice-canary.yaml
 - name: Wait for canary health
 run: |
 # Poll for success rate > 99% for 5 minutes
 # If failing, revert VirtualService to stable routing
 - name: Promote canary
 if: success() #&& health check passed
 run: |
 kubectl apply -f istio/virtualservice-promote.yaml
 kubectl delete -f k8s/deployment-stable.yaml

Istio ve GitOps ile CI/CD'nin tam bir örneği için, Argo Rollouts ile kanary dağıtımları üzerine yazdığınız ISBN 0'a atıfta bulunun.

3. Trafik Yönetimi

CI/CD'de bir hizmet katmanının gerçek gücü iyi hazırlanmış trafik kontrolüdir. Boru hattınızda, ağınızın özel kaynak tanımlarını kullanarak dinamik olarak ayarlayabilirsiniz (CRDs).

Canary Deployments

Istio'da, bir Sanal Servis iki veya daha fazla alt set arasında trafiği ayırabilir (vardırRule ile tanımlanabilir).

apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
 name: myapp
spec:
 hosts:
 - myapp.svc.cluster.local
 http:
 - match:
 - headers:
 my-version:
 exact: "v2"
 route:
 - destination:
 host: myapp
 subset: v2
 weight: 100
 - route:
 - destination:
 host: myapp
 subset: v1
 weight: 90
 - destination:
 host: myapp
 subset: v2
 weight: 10

CI/CD boru hattınız, bu SanalHizmetin çevreye ve istenen kanarya oranına göre ortaya çıkabilir. tamamen otomatik bir kanal serbest bırakılması için, özel araçları kullanarak 444D:0)Argo Rollouts veya [[Dönetici][D][/FONT][/FONT][/FONT][/FONT][/FONT][/TRNT=2) ile entegre edilir.

Blue-Green Deployments

Bir servis ağı ile mavi-yeşil dağıtımlar basittir: eski (“mavi”) ile yeni versiyon dağıtmak ve sonra Sanal Hizmet/Gateway'i yeşile işaret etmek için değiştirin.Bu pahalı yük dengesi yapılandırması önlemek için - ağ derhal kesir.

Özel Bayraklar ve Header-Based Routing

İç kullanıcılarla test özellikleri için, aşağıdaki başlıklara göre ağ yapılandırabilirsiniz. Örneğin:

apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
 name: myapp
spec:
 hosts:
 - myapp.svc.cluster.local
 http:
 - match:
 - headers:
 user-agent:
 regex: ".*InternalTester.*"
 route:
 - destination:
 host: myapp
 subset: v2
 - route:
 - destination:
 host: myapp
 subset: v1

Bu model, üretimde güvenilir bir kullanıcı grubu ile yeni versiyonları test etmenizi sağlarken, istikrarlı sürümde daha geniş seyirci tutar.

4. Güvenlik Politikaları Kod Olarak

Hizmet ağ güvenlik politikaları – kimlik doğrulama politikaları, yetkilendirme politikaları ve mTLS ayarları gibi – aynı CI/CD boru hattını uygulama kodu olarak yönetin.Bu politikaları Git'te kullanın ve dağıtım aşamasında uygular. Örneğin, Istio AuthorizationPolicy hizmetinin kendisi ile birlikte versiyonlanabilir:

apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
 name: myapp-authz
 namespace: default
spec:
 selector:
 matchLabels:
 app: myapp
 version: v2
 rules:
 - from:
 - source:
 principals: ["cluster.local/ns/default/sa/myapp-v2"]
 to:
 - operation:
 methods: ["GET", "POST"]

CI/CD boru hattınızla güvenlik politikasını otomatik olarak otomatikleştirdiğinizde, bir hizmetin her yeni versiyonunun otomatik olarak doğru erişim kontrollerini devralmasını sağlarsınız.

5.İşletme Geçerliliği için gözlemlenebilirlik

CI/CD'yi bir servis ağı ile bütünleştirmek, dağıtımları gerçek zamanlı olarak doğrulayabilecek güçlü bir gözlemlenebilirlik katmanı sağlar.Geçmiş ihracat telemetri (metrikler, izler ve loglar) boru hattınızın, bir kanaryın sağlıklı olup olmadığını tespit etmek için sorgulayabilmesi.

Tipik dağıtım doğrulama kriterleri şunlardır:

  • Hata oranı (HTTP 5xx) bir eşiğin altında (örneğin,% 0,5).
  • Latency (p99) önceki sürümden daha fazla% 10'a kadar geçmemektedir.
  • Kanal hacmi, kanaryın beklenen payı doğrulamaktadır.
  • Herhangi bir güvenlik politikası ihlallerinin ortadan kaldırılması.

Prometheus'tan bu ölçümleri sorgulayabilirsiniz (bu Istio ile bütünleşir) veya ağdaki telemetri API'sinden.Eğer bir kanary sağlık kontrolü başarısız olursa, boru hattı, sanal hizmeti tekrar tekrarlayarak geri dönebilirsiniz.

Daha derin entegrasyon için, bkz.D:0)Istio'nun sorgulama konusundaki belgeleri).

Servis Meşru ile Gelişmiş CI /CD Desenleri

Çok-Cluster Deployments

Istio gibi servis yapıları çok renkli ağlar, birden fazla Kubernet kümeleri arasında değişiklikler yapmak için dağıtım hatlarının (örneğin, üretim) bir kombinasyonunu kullanabilirsiniz.

Trafik Aynası (Shadowing)

Trafik aynası kopyaları, kullanıcının performansını etkilemeden yeni bir sürüme kadar trafiği canlı bir şekilde yaşarsınız.Bu, pre-prodüksiyon geçerliliği için faydalıdır.In Istio, you can mirror traffic using the VirtualServiceUZT:7} field. Your CI/CD pipeline can deploy a version with mirroring enabled, analyze the ayna trafiğinin performansını analiz edebilir ve sonra başarılı bir şekilde teşvik edebilirsiniz.

GitOps ve Progresif Teslimat

GitOps (e.g., ArgoCD, Flux) tam zamanlı teslimat için hizmet ağ yetenekleri ile birleştirin.Bu modelde, istenen devlet Git'te depolanır ve küme durumunu sürekli olarak geri getirir.Yeni bir kanaryanın Gittiği zaman ArgoCD otomatik olarak uygulanır ve ağ geçidi her yapılandırma adımlarını ortadan kaldırır.

Üretim için En İyi Uygulamalar

  • [FONT:0) Yapı yapılandırmanızı Çözme ([Dönetici: 0) Her Sanal Hizmet, HedefRule ve AuthorizationPolicy, kümedeki kaynakları manuel olarak düzenlememelidir.
  • [FONT:0)Automate canary analysis.[[Dönetici:0)Otomatik olarak, Bayrakger veya Argo Rollouts gibi araçları kullanarak metrik eşlerin eşiğine dayalı olarak geri yuvarlanır.
  • [FONT:0] Üretim dışı sistemlerdeki test uygulamaları; ), trafik yönlendirme, güvenlik politikaları ve üretime dağıtmadan önce bir ortamda TLS uygulamaları doğrulama testleri.
  • [FONT=0) Ağağın kendisini takip eder.[[Dönetici:0) CI/CD boru hattınız, ağ geçidinin kontrol uçağı için sağlık kontrollerini içermelidir (Pilot, ⁇ (eğer kullanılırsa), vb.) Başarısız bir kontrol uçağı yaygın bir kesintiye neden olabilir.
  • [FONT:0]İmplement devre kesiciler ve yeniden kayıt işlemleri[Döneticiler) Yeni hizmetler için sıfır güven varsayılanlarını tanımlar.FortRules to set connection pools and outlier detect to prevent cascading failures during a bad deployment.
  • [FONT:0) Pencereleri kısa tut.[Dönetici:0) Daha uzun bir süre, gerçek kullanıcı verilerinin daha fazla riskini, promosyondan önce 5-15 dakika trafik gözlemi için, karmaşık A/B deneylerini çalıştırmıyorsanız.
  • [FONT:0]Document rollback prosedürleri[Dönetici:0] Boru hattınızda otomatik geri dönüş ile bile, önceki sürüme %100 trafik değiştiren bir el geri dönüş senaryosu var.

Common Pitfalls Kaçmak için

  • [FONT:0) Yankar kaynağı limitlerini görmezden gelir.[DÜT:1] Eğer yankar proxy hafıza veya CPU'dan çıkarsa, hizmet iletişimi etkileyebilir. Her zaman uygun kaynak talepleri ve yankarlar için sınırları kurabilir.
  • [[İşçilik:0) Servislerle koordine olmadan ağ değişiklikleri işliyor.[*] IngressGateway veya Sanal Servise bir değişiklik, aynı anda birden çok hizmeti etkileyebilir. Uygulama kodu için yapabileceğiniz gibi ağ yapılandırma değişiklikleri için kullanım kolaylığı sağlayabilir.
  • [FONT:0)Öyleleme kuralları[Dönlendirmeler:0) Basit ağırlık tabanlı kanallarla başlayın. Zincirlemeden çok fazla maç koşulları veya birden fazla Sanal Hizmet aynı hostu çakıştırmaktan kaçının.
  • [FONT:0] Testte mTLS'yi doğrulamaz.[DÜDÜT:1) CI boru hattınızın erken yapılandırma hataları yakalamak için mTLS geçerliliği testlerini yürütür.
  • [FONT:0)Geçmişlerin gümüş bir mermi olduğunu varsayın.[DÜT:1] Bir hizmet ağı geç kalmış ve operasyonel bir üst ekler. Takımınızın tüm hizmetler için kabul etmeden önce yönetme yeteneğine sahip olup olmadığını Evaluate.

Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç

CI/CD'yi bir servis ağı ile entegre etmek, dağıtım hattınızı basit bir “sömülmeye” işlemine basit, kontrollü bir serbest bırakma sistemi ile entegre etmek ve hizmet ağlarının trafik yönetimi, güvenlik ve gözlemlenebilirlik özellikleriyle, gerçek üretim trafiğindeki değişiklikleri yapabilme yeteneğinizi kazanır ve tüm mikro hizmetlerdeki tutarlı politikalar uygularsınız.

Bir hizmet ağı kurmak ve onu CI/CD boru hattınızla entegre etmek için yatırım hızla mikro hizmet mimarisi büyüdükçe hızlanır. Bu model raporunu daha az dağıtım olayları benimsemekte olan Teams, kurtarma zamanı (MTTR), ve daha büyük bir hizmetle deneyebilme yeteneği, otomatik olarak tüm filonuzda otomatik olarak genişletir.

Daha ayrıntılı rehberlik için, popüler hizmet ağlarının resmi belgelerini keşfedin:

  • [0]Istio Documentation[[Dönemli: 1)
  • [FONT=0)Linkerd Genel Bakış[[Dönem: 1)
  • [FONT=0) Konsolosluk Belgesi[[Dönemli)