Istio 甚のアプリケヌションの準備

Istio 甚のアプリケヌションの準備

Istio は、分散アプリケヌションの接続、保護、監芖に䟿利なツヌルです。 Istio は、アプリケヌション コヌドずデプロむメントの䟝存関係をパッケヌゞ化するコンテナヌや、それらのコンテナヌを管理する Kubernetes など、゜フトりェアを倧芏暡に実行および管理するためにさたざたなテクノロゞヌを䜿甚したす。 したがっお、Istio を䜿甚するには、これらのテクノロゞヌに基づいた耇数のサヌビスを備えたアプリケヌションがどのように動䜜するかを知る必芁がありたす。 без むスティオ。 これらのツヌルず抂念にすでに慣れおいる堎合は、このチュヌトリアルをスキップしお、このセクションに盎接進んでください。 Google Kubernetes Engine (GKE) ぞの Istio のむンストヌル たたは拡匵機胜をむンストヌルする GKE 䞊の Istio.

これは、゜ヌスコヌドから GKE コンテナたでのプロセス党䜓を段階的に説明し、䟋を通じおこれらのテクノロゞヌの基本を理解できるようにするステップバむステップのガむドです。 たた、Istio がこれらのテクノロゞヌの力をどのように掻甚しおいるかに぀いおも説明したす。 これは、コンテナヌ、Kubernetes、サヌビス メッシュ、たたは Istio に぀いお䜕も知らないこずを前提ずしおいたす。

タスク

このチュヌトリアルでは、次のタスクを完了したす。

  1. 耇数のサヌビスを䜿甚した単玔な Hello World アプリケヌションを孊習したす。
  2. ゜ヌスコヌドからアプリケヌションを実行したす。
  3. アプリケヌションをコンテナにパッケヌゞ化したす。
  4. Kubernetes クラスタヌの䜜成。
  5. コンテナをクラスタヌにデプロむしたす。

始める前に

手順に埓っお Kubernetes Engine API を有効にしたす。

  1. に行く Kubernetes ゚ンゞンのペヌゞ Google Cloud Platform コン゜ヌルで。
  2. プロゞェクトを䜜成たたは遞択したす。
  3. API ず関連サヌビスが有効になるたで埅ちたす。 これには数分かかる堎合がありたす。
  4. Google Cloud Platform プロゞェクトに察しお課金が蚭定されおいるこずを確認しおください。 課金を有効にする方法を孊ぶ.

このチュヌトリアルでは、仮想マシンを準備する Cloud Shell を䜿甚できたす。 Google Compute Engine の g1-small Debian ベヌスの Linux、たたは Linux たたは macOS コンピュヌタヌを䜿甚したす。

オプション A: Cloud Shell を䜿甚する

Cloud Shell を䜿甚する利点:

  • Python 2 および Python 3 開発環境 (以䞋を含む) virtualenv) は完党に構成されおいたす。
  • コマンドラむンツヌル gクラりド, ドッカヌ, git О キュヌブクルこれから䜿甚する はすでにむンストヌルされおいたす。
  • いく぀か遞択できたす テキスト゚ディタ:
    1. コヌド゚ディタヌをクリックするず、Cloud Shell りィンドりの䞊郚に線集アむコンが衚瀺されたす。
    2. Emacs、Vim、たたは Nano。Cloud Shell のコマンドラむンから開きたす。

䜿甚するには クラりドシェル:

  1. GCP コン゜ヌルに移動したす。
  2. プレス クラりド シェルを有効にする GCP コン゜ヌル りィンドりの䞊郚にある (Cloud Shell をアクティブにする)。

Istio 甚のアプリケヌションの準備

䞋郚に GCP コン゜ヌル コマンドラむンを䜿甚した Cloud Shell セッションが新しいりィンドりで開きたす。

Istio 甚のアプリケヌションの準備

オプション B: コマンド ラむン ツヌルをロヌカルで䜿甚する

Linux たたは macOS を実行しおいるコンピュヌタヌで䜜業する堎合は、次のコンポヌネントを構成しおむンストヌルする必芁がありたす。

  1. カスタマむズ Python 3 および Python 2 開発環境.

  2. クラりドSDKをむンストヌルする コマンドラむンツヌルを䜿っお gクラりド.

  3. セット キュヌブクル - 䜜業甚のコマンドラむンツヌル Kubernetes.

    gcloud components install kubectl

  4. セット Docker コミュニティ ゚ディション (CE)。 コマンドラむンツヌルを䜿甚したす ドッカヌサンプル アプリケヌションのコンテナ むメヌゞを䜜成したす。

  5. ツヌルをむンストヌルする Gitのバヌゞョン管理GitHub からサンプル アプリケヌションを入手したす。

サンプルコヌドをダりンロヌド

  1. ゜ヌスコヌドをダりンロヌドする こんにちはサヌバヌ:

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

  2. サンプル コヌド ディレクトリに移動したす。

    cd istio-samples/sample-apps/helloserver

耇数のサヌビスを含むアプリケヌションの探玢

サンプル アプリケヌションは Python で曞かれおおり、以䞋を䜿甚しお察話する XNUMX ぀のコンポヌネントで構成されおいたす。 REST:

  • : ゚ンドポむントが XNUMX ぀あるシンプルなサヌバヌ 埗る、 /、「hello world」をコン゜ヌルに出力したす。
  • ロヌドゞェネ: トラフィックを送信するスクリプト 、XNUMX 秒あたりのリク゚スト数を構成できたす。

Istio 甚のアプリケヌションの準備

゜ヌスコヌドからアプリケヌションを実行する

サンプル アプリケヌションを探玢するには、Cloud Shell たたはコンピュヌタ䞊で実行したす。
1) カタログ䞊 istio-サンプル/サンプル-アプリ/helloserver 走る :

python3 server/server.py

実行時 以䞋が衚瀺されたす。

INFO:root:Starting server...

2) 別のタヌミナル りィンドりを開いおリク゚ストを送信したす。 。 Cloud Shell を䜿甚しおいる堎合は、远加アむコンをクリックしお別のセッションを開きたす。
3) リク゚ストを送信する :

curl http://localhost:8080

サヌバヌの答え:

Hello World!

4) サンプル コヌドをダりンロヌドしたディレクトリから、次のディレクトリに移動したす。 ロヌドゞェネ:

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

5) 次の環境倉数を䜜成したす。

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

6) 実行する virtualenv:

virtualenv --python python3 env

7) 仮想環境をアクティブ化したす。

source env/bin/activate

8) 芁件を蚭定する ロヌドゞェネ:

pip3 install -r requirements.txt

9) 実行する ロヌドゞェネ:

python3 loadgen.py

実行時 ロヌドゞェネ 次のようなメッセヌゞが衚瀺されたす。

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

別のタヌミナルりィンドりで 次のメッセヌゞをコン゜ヌルに出力したす。

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: */*

ネットワヌクの芳点から芋るず、アプリケヌション党䜓が単䞀のホスト (ロヌカル コンピュヌタヌたたは Cloud Shell 仮想マシン) 䞊で実行されたす。 したがっお、䜿甚できたす ロヌカルホストリク゚ストを送信する .
10) やめるには ロヌドゞェネ О 、 入力 Ctrl+C すべおのタヌミナル りィンドりで。
11) タヌミナルりィンドり内 ロヌドゞェネ 仮想環境を非アクティブ化したす。

deactivate

アプリケヌションをコンテナにパッケヌゞ化する

GKE でアプリケヌションを実行するには、サンプルアプリケヌションをパッケヌゞ化する必芁がありたす- О ロヌドゞェネ - で コンテナ。 コンテナは、アプリケヌションをパッケヌゞ化しお環境から隔離する方法です。

アプリケヌションをコンテナにパッケヌゞ化するには、次のものが必芁です。 ドッカヌファむル. ドッカヌファむル アプリケヌションの゜ヌス コヌドずその䟝存関係をビルドするためのコマンドを定矩するテキスト ファむルです。 ドッカヌむメヌゞ。 ビルドしたら、むメヌゞを Docker Hub などのコンテナヌ レゞストリにアップロヌドしたす。 コンテナレゞストリ.

䟋にはすでにありたす ドッカヌファむル のために О ロヌドゞェネ むメヌゞを収集するために必芁なすべおのコマンドが含たれおいたす。 䞋に - ドッカヌファむル のために :

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" ]

  • チヌム FROM Python:3-slim をベヌスずしお Docker に最新のものを䜿甚するように指瀺したす Python 3 のむメヌゞ ベヌスずしお。
  • チヌム コピヌ。 。 ゜ヌス ファむルを珟圚の䜜業ディレクトリにコピヌしたす (この堎合のみ) サヌバヌ.py) をコンテナヌのファむル システムにコピヌしたす。
  • ゚ントリヌポむント コンテナの起動に䜿甚するコマンドを定矩したす。 私たちの堎合、このコマンドは以前に実行したものずほが同じです。 サヌバヌ.py ゜ヌスコヌドから。
  • チヌム 露出 を瀺したす ポヌト経由のデヌタを埅ちたす 8080。 このチヌムはそうではありたせん ポヌトを提䟛したす。 これはポヌトを開くために必芁なある皮の文曞です。 8080 コンテナを起動するずき。

アプリケヌションのコンテナ化の準備

1) 以䞋の環境倉数を蚭定したす。 亀換する プロゞェクトID GCP プロゞェクト ID に倉曎したす。

export PROJECT_ID="PROJECT_ID"

export GCR_REPO="preparing-istio"

倀の䜿甚 プロゞェクトID О GCR_REPO Docker むメヌゞをビルドしおプラむベヌト Container Registry にプッシュするずきに、そのむメヌゞにタグを付けたす。

2) コマンドラむンツヌルのデフォルトの GCP プロゞェクトを蚭定したす。 gクラりド.

gcloud config set project $PROJECT_ID

3) コマンドラむンツヌルのデフォルトゟヌンを蚭定したす。 gクラりド.

gcloud config set compute/zone us-central1-b

4) Container Registry サヌビスが GCP プロゞェクトで有効になっおいるこずを確認したす。

gcloud services enable containerregistry.googleapis.com

コンテナ化サヌバヌ

  1. サンプルが眮かれおいるディレクトリに移動したす :

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

  2. を䜿甚しお画像を組み立おたす ドッカヌファむル 前に定矩した環境倉数:

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

パラメヌタヌ -t Dockerタグを衚したす。 これは、コンテナヌをデプロむするずきに䜿甚するむメヌゞの名前です。

  1. むメヌゞをコンテナ レゞストリにアップロヌドしたす。
    docker push gcr.io/$PROJECT_ID/$GCR_REPO/helloserver:v0.0.1

loadgen のコンテナ化

1) サンプルが存圚するディレクトリに移動したす。 ロヌドゞェネ:

cd ../loadgen

2) 画像を収集したす。

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

3) むメヌゞをコンテナ レゞストリにアップロヌドしたす。

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

画像の䞀芧を芋る

リポゞトリ内のむメヌゞのリストを確認し、むメヌゞがアップロヌドされおいるこずを確認したす。

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

このコマンドは、新しくアップロヌドされたむメヌゞの名前を衚瀺したす。

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

GKE クラスタを䜜成したす。

これらのコンテナは、次のコマンドを䜿甚しお Cloud Shell 仮想マシンたたはコンピュヌタ䞊で実行できたす。 ドッカヌラン。 しかし、実皌働環境では、コンテナを䞀元的に調敎する方法が必芁です。 たずえば、コンテナヌが垞に実行されおいるこずを確認するシステムが必芁であり、トラフィックが増加した堎合に远加のコンテナヌ むンスタンスをスケヌルアップしおスピンアップする方法が必芁です。

コンテナ化されたアプリケヌションを実行するには、次を䜿甚できたす G.K.E.。 GKE は、仮想マシンをクラスタに集玄するコンテナ オヌケストレヌション プラットフォヌムです。 各仮想マシンはノヌドず呌ばれたす。 GKE クラスタは、オヌプン゜ヌスの Kubernetes クラスタ管理システムに基づいおいたす。 Kubernetes は、クラスタヌず察話するためのメカニズムを提䟛したす。

GKE クラスタの䜜成:

1) クラスタヌを䜜成したす。

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

チヌム gクラりド GCP プロゞェクトず指定したデフォルト ゟヌンに istioready クラスタヌを䜜成したす。 Istio を実行するには、少なくずも 4 ぀のノヌドず仮想マシンを甚意するこずをお勧めしたす。 n1-暙準-2.

チヌムは数分でクラスタヌを䜜成したす。 クラスタヌの準備が完了するず、コマンドは次のように出力したす。 メッセヌゞ.

2) コマンドラむンツヌルで認蚌情報を入力したす。 キュヌブクルこれを䜿甚しおクラスタヌを管理するには:

gcloud container clusters get-credentials istioready

3) これで、次経由で Kubernetes ず通信できるようになりたす。 キュヌブクル。 たずえば、次のコマンドはノヌドのステヌタスを確認できたす。

kubectl get nodes

このコマンドはノヌドのリストを生成したす。

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 の䞻芁な抂念

この図は、GKE 䞊のアプリケヌションを瀺しおいたす。

Istio 甚のアプリケヌションの準備

GKE にコンテナをデプロむする前に、Kubernetes の䞻芁な抂念を孊習しおください。 さらに詳しく知りたい堎合は、最埌にリンクがありたす。

  • ノヌドずクラスタヌ。 GKE では、ノヌドは仮想マシンです。 他の Kubernetes プラットフォヌムでは、ノヌドはコンピュヌタヌたたは仮想マシンになりたす。 クラスタヌは、コンテナヌ化されたアプリケヌションをデプロむする単䞀の単䜍ずみなされるノヌドの集合です。
  • ポッド。 Kubernetes では、コンテナはポッド内で実行されたす。 Kubernetes のポッドは分割できない単䜍です。 ポッドは XNUMX ぀以䞊のコンテナを保持したす。 サヌバヌコンテナをデプロむし、 ロヌドゞェネ 別々のポッドにありたす。 ポッド内に耇数のコンテナヌがある堎合 (たずえば、アプリケヌション サヌバヌず プロキシサヌバヌ)、コンテナヌは単䞀の゚ンティティずしお管理され、ポッド リ゜ヌスを共有したす。
  • 導入。 Kubernetes では、デプロむメントは同䞀のポッドのコレクションであるオブゞェクトです。 デプロむメントにより、クラスタヌ ノヌド党䜓に分散されたポッドの耇数のレプリカが起動されたす。 デプロむメントでは、倱敗したポッドたたは応答しなくなったポッドが自動的に眮き換えられたす。
  • Kubernetesサヌビス。 GKE でアプリケヌション コヌドを実行する堎合、 ロヌドゞェネ О 。 Cloud Shell 仮想マシンたたはデスクトップでサヌビスを開始したずき、リク゚ストを пПаЎресу localhost8080。 GKE にデプロむされるず、ポッドは利甚可胜なノヌドで実行されたす。 デフォルトでは、ポッドがどのノヌドで実行されおいるかを制埡できないため、 ポッド 氞続的な IP アドレスはありたせん。
    IPアドレスを取埗するには 、ポッドの䞊にネットワヌク抜象化を定矩する必芁がありたす。 それはそれです Kubernetesサヌビス。 Kubernetes サヌビスは、䞀連のポッドに氞続的な゚ンドポむントを提䟛したす。 いく぀かありたす サヌビスの皮類. 䜿甚する ロヌドバランサヌ、連絡先の倖郚 IP アドレスを提䟛したす。 クラスタヌの倖から。
    Kubernetes には、DNS 名を割り圓おる DNS システムも組み蟌たれおいたす (たずえば、 helloserver.default.cluster.localサヌビス。 このおかげで、クラスタヌ内のポッドは、䞀定のアドレスでクラスタヌ内の他のポッドず通信したす。 DNS 名は、Cloud Shell やコンピュヌタヌなど、クラスタヌの倖郚では䜿甚できたせん。

Kubernetes マニフェスト

アプリケヌションを゜ヌスから実行するずきは、呜什型コマンドを䜿甚したした。 python3

サヌバヌ.py

呜什法は「これをしなさい」ずいう動詞を意味したす。

Kubernetes の䜿甚法 宣蚀的モデル。 これは、Kubernetes に䜕をすべきかを正確に指瀺しおいるのではなく、望たしい状態を蚘述しおいるこずを意味したす。 たずえば、Kubernetes は、システムの実際の状態ず望たしい状態の䞀貫性を保぀ために、必芁に応じおポッドを起動および停止したす。

マニフェストたたはファむルで望たしい状態を指定したす。 ダムル。 YAML ファむルには、XNUMX ぀以䞊の Kubernetes オブゞェクトの仕様が含たれおいたす。

この䟋には、次の YAML ファむルが含たれおいたす。 О ロヌドゞェネ。 各 YAML ファむルは、デプロむメント オブゞェクトず Kubernetes サヌビスの望たしい状態を指定したす。

サヌバヌ.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

  • 皮類 オブゞェクトの皮類を瀺したす。
  • メタデヌタ.名 デプロむメント名を指定したす。
  • 最初のフィヌルド スペック 望たしい状態の説明が含たれおいたす。
  • 仕様レプリカ 必芁なポッドの数を瀺したす。
  • セクション 仕様テンプレヌト ポッドテンプレヌトを定矩したす。 ポッド仕様にフィヌルドがありたす 画像、コンテナ レゞストリから抜出する必芁があるむメヌゞの名前を指定したす。

サヌビスは次のように定矩されたす。

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

  • ロヌドバランサヌ: クラむアントは、氞続的な IP アドレスを持ち、クラスタヌの倖郚からアクセスできるロヌド バランサヌの IP アドレスにリク゚ストを送信したす。
  • タヌゲットポヌト: 芚えおいるずおり、チヌムは 露出8080 в ドッカヌファむル ポヌトを提䟛したせんでした。 ポヌトを提䟛するのはあなたです 8080コンテナに接觊できるように クラスタヌの倖。 私たちの堎合には hellosvc.default.cluster.local:80 (短い名前: こんにちは) ポヌトに察応したす 8080 ポッドのIPアドレス こんにちはサヌバヌ.
  • ポヌト: これは、クラスタヌ内の他のサヌビスがリク゚ストを送信するポヌト番号です。

ロヌドゲン.yaml

デプロむメントオブゞェクトの宛先 ロヌドゲン.yaml 芋える サヌバヌ.yaml。 違いは、展開オブゞェクトにセクションが含たれおいるこずです。 env。 必芁な環境倉数を定矩したす ロヌドゞェネ アプリケヌションを゜ヌスから実行するずきにむンストヌルしたもの。

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

時間 ロヌドゞェネ フィヌルドの受信リク゚ストを受け入れたせん type 指瀺された クラスタヌIP。 このタむプは、クラスタヌ内のサヌビスが䜿甚できる氞続的な IP アドレスを提䟛したすが、この IP アドレスは倖郚クラむアントには公開されたせん。

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

GKE でのコンテナのデプロむ

1) サンプルが存圚するディレクトリに移動したす。 :

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

2) 開く サヌバヌ.yaml テキスト゚ディタで。
3) フィヌルド内の名前を眮き換えたす 画像 Docker むメヌゞの名前に倉曎したす。

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

亀換 プロゞェクトID GCP プロゞェクト ID に倉曎したす。
4) 保存しお閉じる サヌバヌ.yaml.
5) YAML ファむルを Kubernetes にデプロむしたす。

kubectl apply -f server.yaml

正垞に完了するず、コマンドは次のコヌドを生成したす。

deployment.apps/helloserver created
service/hellosvc created

6) ディレクトリに移動したす。 ロヌドゞェネ:

cd ../loadgen

7) 開く ロヌドゲン.yaml テキスト゚ディタで。
8) フィヌルド内の名前を眮き換えたす 画像 Docker むメヌゞの名前に倉曎したす。

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

亀換 プロゞェクトID GCP プロゞェクト ID に倉曎したす。
9) 保存しお閉じる ロヌドゲン.yaml、テキスト゚ディタを閉じたす。
10) YAML ファむルを Kubernetes にデプロむしたす。

kubectl apply -f loadgen.yaml

正垞に完了するず、コマンドは次のコヌドを生成したす。

deployment.apps/loadgenerator created
service/loadgensvc created

11) ポッドのステヌタスを確認したす。

kubectl get pods

コマンドによりステヌタスが衚瀺されたす。

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

12) ポッドからアプリケヌション ログを抜出する ロヌドゞェネ。 亀換 POD_ID 前の回答の識別子に。

kubectl logs loadgenerator-POD_ID

13) 倖郚 IP アドレスを取埗する こんにちは:

kubectl get service

コマンドの応答は次のようになりたす。

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) リク゚ストを送信する こんにちは 亀換する EXTERNAL_IP 倖郚IPアドレスぞ こんにちは.

curl http://EXTERNAL_IP

Istio を䜿っおみたしょう

アプリケヌションはすでに GKE にデプロむされおいたす。 ロヌドゞェネ Kubernetes DNS を䜿甚できたす (hellosvc:80) にリク゚ストを送信したす リク゚ストを送信できたす 倖郚 IP アドレスによる。 Kubernetes には倚くの機胜がありたすが、サヌビスに関しお䞍足しおいる情報がいく぀かありたす。

  • サヌビスはどのように盞互䜜甚するのでしょうか? サヌビス間の関係は䜕ですか? サヌビス間のトラフィックはどのように流れるのでしょうか? あなたはそれを知っおいたすか ロヌドゞェネ にリク゚ストを送信したす , しかし、アプリケヌションに぀いお䜕も知らないず想像しおください。 これらの質問に答えるために、GKE で実行䞭のポッドのリストを芋おみたしょう。
  • メトリクス。 どのぐらいの間 受信リク゚ストに応答したすか? サヌバヌは XNUMX 秒あたり䜕件のリク゚ストを受信したすか? ゚ラヌメッセヌゞが衚瀺されたすか?
  • セキュリティ情報。 間の亀通量 ロヌドゞェネ О ただ通り過ぎるだけ HTTP たたはによっお mTLS?

Istio はこれらすべおの質問に答えたす。 これを行うために、Istio はサむドカヌ プロキシを配眮したす。 ゚ンボむ 各ポッドに。 Envoy プロキシは、アプリケヌション コンテナぞのすべおの送受信トラフィックをむンタヌセプトしたす。 だずいうこずだ О ロヌドゞェネ サむドカヌ プロキシ Envoy 経由で受信し、からのすべおのトラフィック ロヌドゞェネ к Envoy プロキシを経由したす。

Envoy プロキシ間の接続はサヌビス メッシュを圢成したす。 サヌビス メッシュ アヌキテクチャは、Kubernetes の䞊に制埡レむダヌを提䟛したす。

Istio 甚のアプリケヌションの準備

Envoy プロキシは独自のコンテナ内で実行されるため、アプリケヌション コヌドをほずんど倉曎せずに Istio を GKE クラスタ䞊にむンストヌルできたす。 ただし、アプリケヌションを Istio で管理できるようにするために、いく぀かの䜜業を行いたした。

  • すべおのコンテナに察するサヌビス。 導入ぞ О ロヌドゞェネ Kubernetes サヌビスに関連付けられおいたす。 å¹³ ロヌドゞェネ、受信リク゚ストを受信しないサヌビスがありたす。
  • サヌビス内のポヌトには名前が必芁です。 GKE ではサヌビス ポヌトに名前を付けないたたにするこずができたすが、Istio ではサヌビス ポヌトを指定する必芁がありたす。 ポヌト名 圌のプロトコルに埓っお。 YAML ファむル内のポヌト ず呌ばれる HTTPサヌバヌがプロトコルを䜿甚しおいるため HTTP。 もし サヌビス 䜿甚される gRPC、ポヌトに名前を付けたす GRPC.
  • デプロむメントにはフラグが付けられたす。 したがっお、同じサヌビスのバヌゞョン間でトラフィックを分割するなど、Istio のトラフィック管理機胜を䜿甚できたす。

Istio のむンストヌル

Istio をむンストヌルするには XNUMX ぀の方法がありたす。 できる GKE 拡匵機胜で Istio を有効にする たたは Istio のオヌプン゜ヌス バヌゞョンをむンストヌルする クラスタヌ䞊で。 Istio on GKE を䜿甚するず、GKE クラスタのラむフサむクル党䜓にわたっお Istio のむンストヌルずアップグレヌドを簡単に管理できたす。 最新バヌゞョンの Istio が必芁な堎合、たたは Istio コントロヌル パネル構成をさらに制埡したい堎合は、Istio on GKE 拡匵機胜の代わりにオヌプン゜ヌス バヌゞョンをむンストヌルしたす。 アプロヌチを決定するには、蚘事を読んでください GKE には Istio が必芁ですか?.

オプションを遞択し、適切なガむドを確認し、指瀺に埓っおクラスタヌに Istio をむンストヌルしたす。 新しくデプロむしたアプリケヌションで Istio を䜿甚する堎合は、 サむドカヌ実装を有効にする ネヌムスペヌス甚 デフォルト.

クリヌニング

このチュヌトリアルで䜿甚したリ゜ヌスが Google Cloud Platform アカりントに請求されないようにするには、Istio をむンストヌルしおサンプル アプリケヌションを詊した埌、コンテナ クラスタヌを削陀しおください。 これにより、コンピュヌティング むンスタンス、ディスク、ネットワヌク リ゜ヌスなどのすべおのクラスタヌ リ゜ヌスが削陀されたす。

次は䜕ですか

出所 habr.com

コメントを远加したす