Istio için başvuru hazırlama

Istio için başvuru hazırlama

Istio, dağıtılmış uygulamaları bağlamak, güvenliğini sağlamak ve izlemek için kullanışlı bir araçtır. Istio, yazılımı uygun ölçekte çalıştırmak ve yönetmek için uygulama kodunu ve dağıtım bağımlılıklarını paketlemek için kapsayıcılar ve bu kapsayıcıları yönetmek için Kubernetes dahil olmak üzere çeşitli teknolojiler kullanır. Bu nedenle Istio ile çalışmak için bu teknolojilere dayalı birden fazla hizmete sahip bir uygulamanın nasıl çalıştığını bilmeniz gerekir. olmadan Istio. Bu araçlar ve kavramlar size zaten tanıdık geliyorsa, bu öğreticiyi atlayıp doğrudan bu bölüme gitmekten çekinmeyin. Istio'yu Google Kubernetes Engine'e (GKE) yükleme veya bir uzantı yükleme GKE'de Istio.

Bu, bir örnek aracılığıyla size bu teknolojiler hakkında temel bir anlayış sunmak için kaynak kodundan GKE kapsayıcısına kadar tüm süreci adım adım anlatacağımız bir kılavuzdur. Ayrıca Istio'nun bu teknolojilerin gücünden nasıl yararlandığını da göreceksiniz. Bu, konteynerler, Kubernetes, hizmet ağları veya Istio hakkında hiçbir şey bilmediğinizi varsayar.

görevler

Bu eğitimde aşağıdaki görevleri tamamlayacaksınız:

  1. Birden fazla hizmet içeren basit bir merhaba dünya uygulamasını öğrenme.
  2. Uygulamayı kaynak kodundan çalıştırın.
  3. Uygulamanın kaplarda paketlenmesi.
  4. Kubernetes kümesi oluşturma.
  5. Kapsayıcıları bir kümeye dağıtma.

Başlamadan önce

Kubernetes Engine API'sini etkinleştirmek için talimatları izleyin:

  1. Git Kubernetes Engine sayfası Google Cloud Platform konsolunda.
  2. Bir proje oluşturun veya seçin.
  3. API ve ilgili hizmetler etkinleştirilene kadar bekleyin. Bu bir kaç dakika alabilir.
  4. Google Cloud Platform projeniz için faturalandırma ayarlarının yapıldığından emin olun. Faturalandırmayı nasıl etkinleştireceğinizi öğrenin.

Bu eğitimde sanal makineyi hazırlayan Cloud Shell'i kullanabilirsiniz. Google Compute Engine'de g1-small Debian tabanlı Linux veya Linux veya macOS bilgisayarla.

Seçenek A: Cloud Shell'i Kullanma

Cloud Shell'i kullanmanın avantajları:

  • Python 2 ve Python 3 geliştirme ortamları (dahil) virtualenv) tamamen yapılandırılmıştır.
  • Komut Satırı Araçları bulut, liman işçisi, git и KubectlKullanacağımız dosyalar zaten kurulu.
  • Aralarından seçim yapabileceğiniz birkaç tane var metin editörleri:
    1. Kod düzenleyiciCloud Shell penceresinin üst kısmındaki düzenleme simgesiyle açılır.
    2. Cloud Shell'deki komut satırından açılan Emacs, Vim veya Nano.

Kullanmak Bulut Kabuğu:

  1. GCP konsoluna gidin.
  2. Düğmeye bas Cloud Shell'i etkinleştirin (Cloud Shell'i etkinleştirin) GCP konsol penceresinin üst kısmında.

Istio için başvuru hazırlama

alt kısımda GCP konsolu Komut satırı içeren bir Cloud Shell oturumu yeni bir pencerede açılacaktır.

Istio için başvuru hazırlama

Seçenek B: Komut Satırı Araçlarını Yerel Olarak Kullanma

Linux veya macOS çalıştıran bir bilgisayarda çalışacaksanız aşağıdaki bileşenleri yapılandırmanız ve yüklemeniz gerekecektir:

  1. Özelleştirme Python 3 ve Python 2 geliştirme ortamı.

  2. Cloud SDK'yı yükleyin komut satırı aracıyla bulut.

  3. Ayarlamak Kubectl - çalışmak için komut satırı aracı Kubernetes.

    gcloud components install kubectl

  4. Ayarlamak Docker Topluluk Sürümü (CE). Komut satırı aracını kullanacaksınız liman işçisiÖrnek uygulama için kapsayıcı görüntüleri oluşturmak için.

  5. Aracı yükleyin Git sürüm kontrolüörnek uygulamayı GitHub'dan almak için.

Örnek kodu indirin

  1. Kaynak kodunu indirin merhaba sunucu:

    git clone https://github.com/GoogleCloudPlatform/istio-samples

  2. Örnek kod dizinine gidin:

    cd istio-samples/sample-apps/helloserver

Birden fazla hizmet içeren bir uygulamayı keşfetme

Örnek uygulama Python'da yazılmıştır ve aşağıdakileri kullanarak etkileşime giren iki bileşenden oluşur: DİNLENME:

  • sunucu: tek uç noktaya sahip basit sunucu ELDE ETMEK, /, konsola "merhaba dünya" yazdırır.
  • yük: trafiği gönderen komut dosyası sunucu, saniyede yapılandırılabilir sayıda istekle.

Istio için başvuru hazırlama

Bir uygulamayı kaynak kodundan çalıştırma

Örnek uygulamayı keşfetmek için Cloud Shell'de veya bilgisayarınızda çalıştırın.
1) Katalogda istio-örnekler/örnek-uygulamalar/helloserver Çalıştırmak sunucu:

python3 server/server.py

Başlangıçta sunucu aşağıdakiler görüntülenir:

INFO:root:Starting server...

2) İstekleri göndermek için başka bir terminal penceresi açın sunucu. Cloud Shell kullanıyorsanız başka bir oturum açmak için ekle simgesini tıklayın.
3) Şuraya bir istek gönderin: sunucu:

curl http://localhost:8080

sunucu cevapları:

Hello World!

4) Örnek kodu indirdiğiniz dizinden, içeren dizine gidin. yük:

cd YOUR_WORKING_DIRECTORY/istio-samples/sample-apps/helloserver/loadgen

5) Aşağıdaki ortam değişkenlerini oluşturun:

export SERVER_ADDR=http://localhost:8080
export REQUESTS_PER_SECOND=5

6) Kontrol Et virtualenv:

virtualenv --python python3 env

7) Sanal ortamı etkinleştirin:

source env/bin/activate

8) Gereksinimleri belirleyin yük:

pip3 install -r requirements.txt

9) Kontrol Et yük:

python3 loadgen.py

Başlangıçta yük aşağıdaki mesaja benzer bir şey görüntüler:

Starting loadgen: 2019-05-20 10:44:12.448415
5 request(s) complete to http://localhost:8080

Başka bir terminal penceresinde sunucu aşağıdaki mesajları konsola gönderir:

127.0.0.1 - - [21/Jun/2019 14:22:01] "GET / HTTP/1.1" 200 -
INFO:root:GET request,
Path: /
Headers:
Host: localhost:8080
User-Agent: python-requests/2.22.0
Accept-Encoding: gzip, deflate
Accept: */*

Ağ oluşturma açısından bakıldığında, uygulamanın tamamı tek bir ana bilgisayarda (yerel bilgisayar veya Cloud Shell sanal makinesi) çalışır. Bu nedenle kullanabilirsiniz localhostistekleri göndermek için sunucu.
10) Durdurmak yük и sunucu, girmek Ctrl-c her terminal penceresinde.
11) Terminal penceresinde yük sanal ortamı devre dışı bırakın:

deactivate

Bir uygulamayı kaplarda paketleme

Uygulamayı GKE'de çalıştırmak için örnek uygulamayı paketlemeniz gerekir: sunucu и yük - içinde Konteynerler. Kapsayıcı, bir uygulamayı ortamından yalıtmak için paketlemenin bir yoludur.

Bir uygulamayı bir kapsayıcıya paketlemek için şunlara ihtiyacınız vardır: Dockerfile. Dockerfile uygulamanın kaynak kodunu ve bağımlılıklarını oluşturmak için komutları tanımlayan bir metin dosyasıdır. Docker görüntüsü. Oluşturulduktan sonra görüntüyü Docker Hub gibi bir kapsayıcı kayıt defterine yüklersiniz veya Konteyner Kayıt Defteri.

Örnek zaten var Dockerfile için sunucu и yük görüntüleri toplamak için gerekli tüm komutlarla. Altında - Dockerfile için sunucu:

FROM python:3-slim as base
FROM base as builder
RUN apt-get -qq update 
    && apt-get install -y --no-install-recommends 
        g++ 
    && rm -rf /var/lib/apt/lists/*

# Enable unbuffered logging
FROM base as final
ENV PYTHONUNBUFFERED=1

RUN apt-get -qq update 
    && apt-get install -y --no-install-recommends 
        wget

WORKDIR /helloserver

# Grab packages from builder
COPY --from=builder /usr/local/lib/python3.7/ /usr/local/lib/python3.7/

# Add the application
COPY . .

EXPOSE 8080
ENTRYPOINT [ "python", "server.py" ]

  • Ekip Python'DAN: Temel olarak 3-slim Docker'a en son sürümü kullanmasını söyler Python 3 resmi bir üs olarak.
  • Ekip KOPYALA. . kaynak dosyaları geçerli çalışma dizinine kopyalar (bizim durumumuzda yalnızca sunucu.py) kapsayıcının dosya sistemine.
  • GİRİŞ NOKTASI Kabı başlatmak için kullanılan komutu tanımlar. Bizim durumumuzda bu komut, eskiden çalıştırdığınız komutla neredeyse aynı sunucu.py kaynak kodundan.
  • Ekip MARUZ BIRAKMAK belirtir sunucu port üzerinden veri bekler 8080. Bu takım değil bağlantı noktaları sağlar. Bu, bağlantı noktasını açmak için gereken bir tür belgedir 8080 konteyneri başlatırken.

Uygulamanızı kapsayıcıya almaya hazırlanıyor

1) Aşağıdaki ortam değişkenlerini ayarlayın. Yer değiştirmek PROJECT_ID GCP proje kimliğinize.

export PROJECT_ID="PROJECT_ID"

export GCR_REPO="preparing-istio"

Değerleri kullanma PROJECT_ID и GCR_REPO Docker görüntüsünü oluştururken etiketlersiniz ve onu özel bir Container Registry'ye gönderirsiniz.

2) Komut satırı aracı için varsayılan GCP projesini ayarlayın bulut.

gcloud config set project $PROJECT_ID

3) Komut satırı aracı için varsayılan bölgeyi ayarlayın bulut.

gcloud config set compute/zone us-central1-b

4) GCP projesinde Container Registry hizmetinin etkinleştirildiğinden emin olun.

gcloud services enable containerregistry.googleapis.com

Konteynerleştirme sunucusu

  1. Örneğin bulunduğu dizine gidin sunucu:

    cd YOUR_WORKING_DIRECTORY/istio-samples/sample-apps/helloserver/server/

  2. kullanarak görüntüyü birleştirin Dockerfile ve daha önce tanımladığınız ortam değişkenleri:

    docker build -t gcr.io/$PROJECT_ID/$GCR_REPO/helloserver:v0.0.1 .

Parametre -t Docker etiketini temsil eder. Bu, kapsayıcıyı dağıtırken kullandığınız görüntünün adıdır.

  1. Görüntüyü Container Registry'ye yükleyin:
    docker push gcr.io/$PROJECT_ID/$GCR_REPO/helloserver:v0.0.1

Yükün konteynerle taşınması

1) Örneğin bulunduğu dizine gidin yük:

cd ../loadgen

2) Resmi toplayın:

docker build -t gcr.io/$PROJECT_ID/$GCR_REPO/loadgen:v0.0.1 .

3) Görüntüyü Container Registry'ye yükleyin:

docker push gcr.io/$PROJECT_ID/$GCR_REPO/loadgen:v0.0.1

Resimlerin listesini görüntüleme

Depodaki görsellerin listesini inceleyin ve görsellerin yüklendiğini doğrulayın:

gcloud container images list --repository gcr.io/$PROJECT_ID/preparing-istio

Komut, yeni yüklenen görsellerin adlarını görüntüler:

NAME
gcr.io/PROJECT_ID/preparing-istio/helloserver
gcr.io/PROJECT_ID/preparing-istio/loadgen

GKE kümesi oluşturma.

Bu konteynerler Cloud Shell sanal makinesinde veya bilgisayarda şu komutla çalıştırılabilir: docker koşmak. Ancak üretim ortamında konteynerleri merkezi olarak düzenlemenin bir yoluna ihtiyacınız var. Örneğin, konteynerlerin her zaman çalışmasını sağlayan bir sisteme ihtiyacınız var ve trafiğin artması durumunda ölçeği büyütüp ek konteyner örneklerini hızlandırmanın bir yoluna ihtiyacınız var.

Konteynerli uygulamaları çalıştırmak için kullanabilirsiniz G.K.E.. GKE, sanal makineleri bir kümede toplayan bir konteyner düzenleme platformudur. Her sanal makineye düğüm adı verilir. GKE kümeleri, açık kaynaklı Kubernetes küme yönetim sistemini temel alır. Kubernetes, kümeyle etkileşime geçmek için mekanizmalar sağlar.

GKE kümesi oluşturma:

1) Bir küme oluşturun:

gcloud container clusters create istioready 
  --cluster-version latest 
  --machine-type=n1-standard-2 
  --num-nodes 4

Ekip bulut GCP projesinde ve belirttiğiniz varsayılan bölgede istioready kümesi oluşturur. Istio'yu çalıştırmak için en az 4 düğüme ve bir sanal makineye sahip olmanızı öneririz n1-standart-2.

Ekip birkaç dakika içinde kümeyi oluşturur. Küme hazır olduğunda komut şunun gibi bir çıktı verir: mesaj.

2) Komut satırı aracında kimlik bilgilerini sağlayın Kubectlkümeyi yönetmek için kullanmak için:

gcloud container clusters get-credentials istioready

3) Artık Kubernetes ile iletişim kurabilirsiniz. Kubectl. Örneğin, aşağıdaki komut düğümlerin durumunu öğrenebilir:

kubectl get nodes

Komut, düğümlerin bir listesini oluşturur:

NAME                                       STATUS   ROLES    AGE    VERSION
gke-istoready-default-pool-dbeb23dc-1vg0   Ready    <none>   99s    v1.13.6-gke.13
gke-istoready-default-pool-dbeb23dc-36z5   Ready    <none>   100s   v1.13.6-gke.13
gke-istoready-default-pool-dbeb23dc-fj7s   Ready    <none>   99s    v1.13.6-gke.13
gke-istoready-default-pool-dbeb23dc-wbjw   Ready    <none>   99s    v1.13.6-gke.13

Kubernetes'in Temel Kavramları

Diyagramda GKE'deki bir uygulama gösterilmektedir:

Istio için başvuru hazırlama

GKE'de Container'ları dağıtmadan önce Kubernetes'in temel kavramlarını öğrenin. Daha fazlasını öğrenmek istiyorsanız en sonunda bağlantılar var.

  • Düğümler ve kümeler. GKE'de düğüm bir sanal makinedir. Diğer Kubernetes platformlarında bir düğüm, bir bilgisayar veya sanal makine olabilir. Küme, kapsayıcıya alınmış bir uygulamayı dağıttığınız tek bir birim olarak kabul edilebilecek bir düğüm koleksiyonudur.
  • Kapsüller. Kubernetes'te konteynerler pod'lar halinde çalışır. Kubernetes'teki Pod bölünmez bir birimdir. Bir Pod, bir veya daha fazla kapsayıcıyı barındırır. Sunucu kapsayıcılarını dağıtırsınız ve yük ayrı bölmelerde. Bir bölmede birden fazla kapsayıcı olduğunda (örneğin, bir uygulama sunucusu ve Proxy sunucu), kapsayıcılar tek bir varlık olarak yönetilir ve bölme kaynaklarını paylaşır.
  • Dağıtımlar. Kubernetes'te dağıtım, aynı bölmelerden oluşan bir koleksiyon olan bir nesnedir. Dağıtım, küme düğümleri arasında dağıtılan birden fazla bölmenin kopyasını başlatır. Dağıtım, arızalı veya yanıt vermeyen bölmeleri otomatik olarak değiştirir.
  • Kubernetes hizmeti. GKE'de uygulama kodunu çalıştırırken arasındaki bağlantı yük и sunucu. Cloud Shell sanal makinesinde veya masaüstünde hizmetleri başlattığınızda, istekler gönderdiniz. sunucu adrese göre localhost: 8080. Kapsüller, GKE'ye dağıtıldıktan sonra mevcut düğümlerde yürütülür. Varsayılan olarak, bölmenin hangi düğümde çalıştığı üzerinde hiçbir kontrolünüz yoktur; kapsüller kalıcı IP adresi yok.
    Bir IP adresi almak için sunucu, bölmelerin üstünde bir ağ soyutlaması tanımlamanız gerekir. İşte bu Kubernetes hizmeti. Kubernetes hizmeti, bir dizi kapsül için kalıcı bir uç nokta sağlar. Birkaç tane var hizmet türleri. sunucu использует Yük dengeleyiciiletişim kurulacak harici bir IP adresi sağlayan sunucu kümenin dışından.
    Kubernetes ayrıca DNS adlarını atayan yerleşik bir DNS sistemine de sahiptir (örneğin, helloserver.default.cluster.local) Hizmetler. Bu sayede küme içindeki podlar kümedeki diğer podlarla sabit bir adres üzerinden iletişim kurar. DNS adı, Cloud Shell veya bilgisayar gibi kümenin dışında kullanılamaz.

Kubernetes manifestoları

Uygulamayı kaynaktan çalıştırdığınızda zorunluluk komutunu kullandınız python3

sunucu.py

Emir bir fiili ima eder: "bunu yap."

Kubernetes'in kullanım alanları bildirim modeli. Bu, Kubernetes'e tam olarak ne yapması gerektiğini söylemediğimiz, bunun yerine istenen durumu tanımladığımız anlamına gelir. Örneğin Kubernetes, sistemin gerçek durumunu istenen durumla tutarlı tutmak için gerektiğinde pod'ları başlatır ve durdurur.

İstenilen durumu bildirimlerde veya dosyalarda belirtirsiniz YAML. YAML dosyası bir veya daha fazla Kubernetes nesnesinin özelliklerini içerir.

Örnek, aşağıdakiler için bir YAML dosyası içeriyor: sunucu и yük. Her YAML dosyası, dağıtım nesnesinin ve Kubernetes hizmetinin istenen durumunu belirtir.

sunucu.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: helloserver
spec:
  selector:
    matchLabels:
      app: helloserver
  replicas: 1
  template:
    metadata:
      labels:
        app: helloserver
    spec:
      terminationGracePeriodSeconds: 5
      restartPolicy: Always
      containers:
      - name: main
        image: gcr.io/google-samples/istio/helloserver:v0.0.1
        imagePullPolicy: Always

  • tür nesnenin türünü belirtir.
  • metadata.name dağıtım adını belirtir.
  • İlk alan spec İstenilen durumun bir açıklamasını içerir.
  • spesifik kopyalar istenilen kapsül sayısını gösterir.
  • Bölüm spesifikasyon şablonu bir bölme şablonunu tanımlar. Pod spesifikasyonunda bir alan var görüntü, Container Registry'den çıkarılması gereken görüntünün adını belirtir.

Hizmet şu şekilde tanımlanır:

apiVersion: v1
kind: Service
metadata:
  name: hellosvc
spec:
  type: LoadBalancer
  selector:
    app: helloserver
  ports:
  - name: http
    port: 80
    targetPort: 8080

  • Yük dengeleyici: İstemciler, kalıcı bir IP adresine sahip olan ve kümenin dışından erişilebilen yük dengeleyicinin IP adresine istek gönderir.
  • hedefPort: hatırladığınız gibi, ekip MARUZ KALMA 8080 в Dockerfile bağlantı noktası sağlamadı. Limanı sen sağlıyorsun 8080böylece konteynerle iletişime geçebilirsiniz sunucu kümenin dışında. Bizim durumumuzda hellosvc.default.cluster.local:80 (Kısa isim: merhabasvc) bağlantı noktasına karşılık gelir 8080 Kapsül IP adresleri merhaba sunucu.
  • Liman: Clusterdaki diğer servislerin istek göndereceği port numarasıdır.

yükgen.yaml

Dağıtım nesnesi yükgen.yaml benzemek sunucu.yaml. Aradaki fark, dağıtım nesnesinin bir bölüm içermesidir. env. İhtiyaç duyulan ortam değişkenlerini tanımlar yük ve uygulamayı kaynaktan çalıştırırken yüklediğiniz.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: loadgenerator
spec:
  selector:
    matchLabels:
      app: loadgenerator
  replicas: 1
  template:
    metadata:
      labels:
        app: loadgenerator
    spec:
      terminationGracePeriodSeconds: 5
      restartPolicy: Always
      containers:
      - name: main
        image: gcr.io/google-samples/istio/loadgen:v0.0.1
        imagePullPolicy: Always
        env:
        - name: SERVER_ADDR
          value: "http://hellosvc:80/"
        - name: REQUESTS_PER_SECOND
          value: "10"
        resources:
          requests:
            cpu: 300m
            memory: 256Mi
          limits:
            cpu: 500m
            memory: 512Mi

Zaman yük alana gelen istekleri kabul etmiyor tip Belirtilen Küme IP'si. Bu tür, kümedeki hizmetlerin kullanabileceği kalıcı bir IP adresi sağlar ancak bu IP adresi harici istemcilere açık değildir.

apiVersion: v1
kind: Service
metadata:
  name: loadgensvc
spec:
  type: ClusterIP
  selector:
    app: loadgenerator
  ports:
  - name: http
    port: 80
    targetPort: 8080

Container'ları GKE'de Dağıtma

1) Örneğin bulunduğu dizine gidin sunucu:

cd YOUR_WORKING_DIRECTORY/istio-samples/sample-apps/helloserver/server/

2) Açık sunucu.yaml bir metin düzenleyicide.
3) Alandaki adı değiştirin görüntü Docker görüntünüzün adına.

image: gcr.io/PROJECT_ID/preparing-istio/helloserver:v0.0.1

değiştirmek PROJECT_ID GCP proje kimliğinize.
4) Kaydet ve kapat sunucu.yaml.
5) YAML dosyasını Kubernetes'e dağıtın:

kubectl apply -f server.yaml

Başarılı bir şekilde tamamlandığında komut aşağıdaki kodu üretir:

deployment.apps/helloserver created
service/hellosvc created

6) Bulunduğunuz dizine gidin yük:

cd ../loadgen

7) Açık yükgen.yaml bir metin düzenleyicide.
8) Alandaki adı değiştirin görüntü Docker görüntünüzün adına.

image: gcr.io/PROJECT_ID/preparing-istio/loadgenv0.0.1

değiştirmek PROJECT_ID GCP proje kimliğinize.
9) Kaydet ve kapat yükgen.yaml, metin düzenleyiciyi kapatın.
10) YAML dosyasını Kubernetes'e dağıtın:

kubectl apply -f loadgen.yaml

Başarılı bir şekilde tamamlandığında komut aşağıdaki kodu üretir:

deployment.apps/loadgenerator created
service/loadgensvc created

11) Bölmelerin durumunu kontrol edin:

kubectl get pods

Komut durumu gösterir:

NAME                             READY   STATUS    RESTARTS   AGE
helloserver-69b9576d96-mwtcj     1/1     Running   0          58s
loadgenerator-774dbc46fb-gpbrz   1/1     Running   0          57s

12) Uygulama günlüklerini bölmeden çıkarın yük. Yer değiştirmek POD_ID önceki yanıttaki tanımlayıcıya.

kubectl logs loadgenerator-POD_ID

13) Harici IP adresleri edinin merhabasvc:

kubectl get service

Komut yanıtı şuna benzer:

NAME         TYPE           CLUSTER-IP     EXTERNAL-IP     PORT(S)        AGE
hellosvc     LoadBalancer   10.81.15.158   192.0.2.1       80:31127/TCP   33m
kubernetes   ClusterIP      10.81.0.1      <none>          443/TCP        93m
loadgensvc   ClusterIP      10.81.15.155   <none>          80/TCP         4m52s

14) Şuraya bir istek gönderin: merhabasvc: yer değiştirmek EXTERNAL_IP harici IP adresine merhabasvc.

curl http://EXTERNAL_IP

Haydi Istio'yu ele alalım

Zaten GKE'ye dağıtılmış bir uygulamanız var. yük Kubernetes DNS'yi kullanabilir (merhabasvc:80) istekleri göndermek için sunucuve şu adrese istek gönderebilirsiniz: sunucu harici IP adresine göre. Kubernetes'in birçok özelliği olmasına rağmen hizmetler hakkında bazı bilgiler eksiktir:

  • Hizmetler nasıl etkileşime girer? Hizmetler arasındaki ilişkiler nelerdir? Hizmetler arasında trafik nasıl akıyor? farkında mısın yük istekleri gönderir sunucu, ancak uygulama hakkında hiçbir şey bilmediğinizi hayal edin. Bu soruları yanıtlamak için GKE'deki çalışan kapsüllerin listesine bakalım.
  • Metrikler. Ne kadardır sunucu gelen bir isteğe yanıt veriyor mu? Sunucu tarafından saniyede kaç istek alınıyor? Hata mesajları veriyor mu?
  • Güvenlik bilgileri. Arasındaki trafik yük и sunucu sadece geçiyor HTTP veya mTLS?

Istio tüm bu soruları yanıtlıyor. Bunu yapmak için Istio bir sepet proxy'si yerleştirir elçi her bölmede. Envoy proxy'si, uygulama kapsayıcılarına gelen ve giden tüm trafiği keser. Bu demektir sunucu и yük sepet proxy Elçisi aracılığıyla ve tüm trafiği alın yük к sunucu Elçi vekilinden geçer.

Envoy proxy'leri arasındaki bağlantılar bir hizmet ağı oluşturur. Hizmet ağı mimarisi, Kubernetes'in üzerinde bir kontrol katmanı sağlar.

Istio için başvuru hazırlama

Envoy proxy'leri kendi kapsayıcılarında çalıştığı için Istio, uygulama kodunda neredeyse hiçbir değişiklik yapılmadan bir GKE kümesinin üzerine kurulabilir. Ancak uygulamanızı Istio tarafından yönetilmeye hazır hale getirmek için bazı çalışmalar yaptınız:

  • Tüm konteynerler için hizmetler. Dağıtımlara sunucu и yük Kubernetes hizmetine bağlı. Eşit yükGelen istekleri almayan bir hizmet var.
  • Hizmetlerdeki bağlantı noktalarının adları olmalıdır. Hizmet bağlantı noktaları GKE'de adsız bırakılabilse de Istio, belirtmenizi gerektirir bağlantı noktası adı kendi protokolüne uygun olarak. YAML dosyasındaki bağlantı noktası sunucu denilen httpçünkü sunucu protokolü kullanıyor HTTP. Eğer hizmet использовал gRPC, bağlantı noktasına isim verirsiniz grpc.
  • Dağıtımlar işaretlendi. Bu nedenle trafiği aynı hizmetin sürümleri arasında bölmek gibi Istio'nun trafik yönetimi özelliklerini kullanabilirsiniz.

Istio'yu yükleme

Istio'yu kurmanın iki yolu vardır. Olabilmek GKE uzantısında Istio'yu etkinleştirin veya Istio'nun açık kaynak sürümünü yükleyin küme üzerinde. GKE'deki Istio ile GKE kümesi yaşam döngüsü boyunca Istio kurulumlarını ve yükseltmelerini kolayca yönetebilirsiniz. Istio'nun en son sürümünü veya Istio kontrol paneli yapılandırmanız üzerinde daha fazla kontrol sahibi olmak istiyorsanız GKE'de Istio uzantısı yerine açık kaynak sürümünü yükleyin. Yaklaşıma karar vermek için makaleyi okuyun GKE'de Istio'ya ihtiyacım var mı?.

Bir seçenek belirleyin, uygun kılavuzu inceleyin ve Istio'yu kümenize yüklemek için talimatları izleyin. Istio'yu yeni dağıtılan uygulamanızla kullanmak istiyorsanız, sepet uygulamasını etkinleştir ad alanı için varsayılan.

Очистка

Bu eğitimde kullandığınız kaynaklar için Google Cloud Platform hesabınıza ücret yansıtılmasını önlemek amacıyla Istio'yu yükledikten ve örnek uygulamayla oynadıktan sonra kapsayıcı kümesini silin. Bu işlem örnekleri, diskler ve ağ kaynakları gibi tüm küme kaynaklarını kaldıracaktır.

Sırada ne var?

Kaynak: habr.com

Yorum ekle