ื”ื›ื ืช ืืคืœื™ืงืฆื™ื” ืœืื™ืกื˜ื™ื•

ื”ื›ื ืช ืืคืœื™ืงืฆื™ื” ืœืื™ืกื˜ื™ื•

Istio ื”ื•ื ื›ืœื™ ื ื•ื— ืœื—ื™ื‘ื•ืจ, ืื‘ื˜ื—ื” ื•ื ื™ื˜ื•ืจ ืืคืœื™ืงืฆื™ื•ืช ืžื‘ื•ื–ืจื•ืช. Istio ืžืฉืชืžืฉืช ื‘ืžื’ื•ื•ืŸ ื˜ื›ื ื•ืœื•ื’ื™ื•ืช ื›ื“ื™ ืœื”ืคืขื™ืœ ื•ืœื ื”ืœ ืชื•ื›ื ื•ืช ื‘ืงื ื” ืžื™ื“ื”, ื›ื•ืœืœ ืงื•ื ื˜ื™ื™ื ืจื™ื ืœืืจื™ื–ืช ืงื•ื“ ื™ื™ืฉื•ืžื™ื ื•ืชืœื•ืช ืœืคืจื™ืกื”, ื•-Kubernetes ืœื ื™ื”ื•ืœ ืงื•ื ื˜ื™ื™ื ืจื™ื ืืœื”. ืœื›ืŸ, ื›ื“ื™ ืœืขื‘ื•ื“ ืขื Istio ืขืœื™ืš ืœื“ืขืช ื›ื™ืฆื“ ืคื•ืขืœืช ืืคืœื™ืงืฆื™ื” ืขื ืžืกืคืจ ืฉื™ืจื•ืชื™ื ื”ืžื‘ื•ืกืกื™ื ืขืœ ื˜ื›ื ื•ืœื•ื’ื™ื•ืช ืืœื• ะฑะตะท ืื™ืกื˜ื™ื•. ืื ื”ื›ืœื™ื ื•ื”ืžื•ืฉื’ื™ื ื”ืืœื” ื›ื‘ืจ ืžื•ื›ืจื™ื ืœืš, ืืชื” ืžื•ื–ืžืŸ ืœื“ืœื’ ืขืœ ื”ื“ืจื›ื” ื–ื• ื•ืœืขื‘ื•ืจ ื™ืฉืจ ืœืกืขื™ืฃ ื”ืชืงื ืช Istio ื‘-Google Kubernetes Engine (GKE) ืื• ื”ืชืงื ืช ื”ืจื—ื‘ื” Istio ืขืœ GKE.

ื–ื”ื• ืžื“ืจื™ืš ืฉืœื‘ ืื—ืจ ืฉืœื‘ ืฉื‘ื• ื ืขื‘ื•ืจ ืขืœ ื›ืœ ื”ืชื”ืœื™ืš ืžืงื•ื“ ื”ืžืงื•ืจ ื•ืขื“ ืœืžื™ื›ืœ GKE ื›ืš ืฉืชืงื‘ืœ ื”ื‘ื ื” ื‘ืกื™ืกื™ืช ืฉืœ ื”ื˜ื›ื ื•ืœื•ื’ื™ื•ืช ื”ืœืœื• ืขื ื“ื•ื’ืžื”. ืชื•ื›ืœื• ื’ื ืœืจืื•ืช ื›ื™ืฆื“ Istio ืžืžื ืคืช ืืช ื”ื›ื•ื— ืฉืœ ื”ื˜ื›ื ื•ืœื•ื’ื™ื•ืช ื”ืœืœื•. ื–ื” ื‘ื”ื ื—ื” ืฉืืชื” ืœื ื™ื•ื“ืข ื›ืœื•ื ืขืœ ืงื•ื ื˜ื™ื™ื ืจื™ื, Kubernetes, ืจืฉืชื•ืช ืฉื™ืจื•ืช ืื• Istio.

ืžืฉื™ืžื•ืช

ื‘ืžื“ืจื™ืš ื–ื”, ืชืฉืœื™ื ืืช ื”ืžืฉื™ืžื•ืช ื”ื‘ืื•ืช:

  1. ืœื™ืžื•ื“ ืืคืœื™ืงืฆื™ื™ืช ืฉืœื•ื ืขื•ืœื ืคืฉื•ื˜ื” ืขื ืžืกืคืจ ืฉื™ืจื•ืชื™ื.
  2. ื”ืคืขืœ ืืช ื”ื™ื™ืฉื•ื ืžืงื•ื“ ื”ืžืงื•ืจ.
  3. ืืจื™ื–ืช ื”ืืคืœื™ืงืฆื™ื” ื‘ืžื™ื›ืœื™ื.
  4. ื™ืฆื™ืจืช ืืฉื›ื•ืœ Kubernetes.
  5. ืคืจื™ืกืช ืžื›ื•ืœื•ืช ืœืืฉื›ื•ืœ.

ืœืคื ื™ ืฉืืชื” ืžืชื—ื™ืœ

ื‘ืฆืข ืืช ื”ื”ื•ืจืื•ืช ื›ื“ื™ ืœื”ืคืขื™ืœ ืืช Kubernetes Engine API:

  1. ืœืš ืืœ ื“ืฃ Kubernetes Engine ื‘ืžืกื•ืฃ Google Cloud Platform.
  2. ืฆื•ืจ ืื• ื‘ื—ืจ ืคืจื•ื™ืงื˜.
  3. ื”ืžืชืŸ ืขื“ ืฉื”-API ื•ื”ืฉื™ืจื•ืชื™ื ื”ื ืœื•ื•ื™ื ื™ื•ืคืขืœื•. ื–ื” ื™ื›ื•ืœ ืœืงื—ืช ื›ืžื” ื“ืงื•ืช.
  4. ื•ื“ื ืฉื”ื—ื™ื•ื‘ ืžื•ื’ื“ืจ ืขื‘ื•ืจ ืคืจื•ื™ืงื˜ Google Cloud Platform ืฉืœืš. ืœืžื“ ื›ื™ืฆื“ ืœื”ืคืขื™ืœ ื—ื™ื•ื‘.

ื‘ืžื“ืจื™ืš ื–ื”, ืืชื” ื™ื›ื•ืœ ืœื”ืฉืชืžืฉ ื‘-Cloud Shell, ื”ืžื›ื™ืŸ ืืช ื”ืžื›ื•ื ื” ื”ื•ื™ืจื˜ื•ืืœื™ืช g1-small ื‘-Google Compute Engine ืขื ืœื™ื ื•ืงืก ืžื‘ื•ืกืกืช ื“ื‘ื™ืืŸ, ืื• ืžื—ืฉื‘ ืœื™ื ื•ืงืก ืื• macOS.

ืืคืฉืจื•ืช ื': ืฉื™ืžื•ืฉ ื‘-Cloud Shell

ื™ืชืจื•ื ื•ืช ื”ืฉื™ืžื•ืฉ ื‘-Cloud Shell:

  • ืกื‘ื™ื‘ื•ืช ืคื™ืชื•ื— Python 2 ื•- Python 3 (ื›ื•ืœืœ ื•ื™ืจื˜ื•ืืœื™) ืžื•ื’ื“ืจื™ื ื‘ืžืœื•ืื.
  • ื›ืœื™ื ืฉืœ ืฉื•ืจืช ื”ืคืงื•ื“ื” gcloud, ืกึทื•ึธืจ, ืกื™ืœื•ืŸ ะธ ืงื•ื‘ืงื˜ืœ, ืฉื‘ื”ื ื ืฉืชืžืฉ ื›ื‘ืจ ืžื•ืชืงื ื™ื.
  • ื™ืฉ ืœืš ื›ืžื” ืœื‘ื—ื™ืจื” ืขื•ืจื›ื™ ื˜ืงืกื˜:
    1. ืขื•ืจืš ืงื•ื“, ืฉื ืคืชื— ืขื ืกืžืœ ื”ืขืจื™ื›ื” ื‘ื—ืœืง ื”ืขืœื™ื•ืŸ ืฉืœ ื—ืœื•ืŸ ื”-Cloud Shell.
    2. Emacs, Vim ืื• Nano, ื”ื ืคืชื—ื™ื ืžืฉื•ืจืช ื”ืคืงื•ื“ื” ื‘-Cloud Shell.

ืœื”ืฉืชืžืฉ ืžืขื˜ืคืช ืขื ืŸ:

  1. ืขื‘ื•ืจ ืืœ ืžืกื•ืฃ GCP.
  2. ืœื—ืฅ ืขืœ ื”ื›ืคืชื•ืจ ื”ืคืขืœ ืืช ื”-Cloud Shell (ื”ืคืขืœ Cloud Shell) ื‘ื—ืœืง ื”ืขืœื™ื•ืŸ ืฉืœ ื—ืœื•ืŸ ืžืกื•ืฃ GCP.

ื”ื›ื ืช ืืคืœื™ืงืฆื™ื” ืœืื™ืกื˜ื™ื•

ื‘ื—ืœืง ื”ืชื—ืชื•ืŸ ืงื•ื ืกื•ืœืช GCP ื”ืคืขืœืช Cloud Shell ืขื ืฉื•ืจืช ืคืงื•ื“ื” ืชื™ืคืชื— ื‘ื—ืœื•ืŸ ื—ื“ืฉ.

ื”ื›ื ืช ืืคืœื™ืงืฆื™ื” ืœืื™ืกื˜ื™ื•

ืืคืฉืจื•ืช ื‘': ืฉื™ืžื•ืฉ ื‘ื›ืœื™ ืฉื•ืจืช ื”ืคืงื•ื“ื” ื‘ืื•ืคืŸ ืžืงื•ืžื™

ืื ืืชื” ืชืขื‘ื•ื“ ืขืœ ืžื—ืฉื‘ ืขื ืœื™ื ื•ืงืก ืื• macOS, ืชืฆื˜ืจืš ืœื”ื’ื“ื™ืจ ื•ืœื”ืชืงื™ืŸ ืืช ื”ืจื›ื™ื‘ื™ื ื”ื‘ืื™ื:

  1. ื”ืชืืžื” ืื™ืฉื™ืช ืกื‘ื™ื‘ืช ืคื™ืชื•ื— Python 3 ื•- Python 2.

  2. ื”ืชืงืŸ Cloud SDK ืขื ื›ืœื™ ืฉื•ืจืช ื”ืคืงื•ื“ื” gcloud.

  3. ืœื”ืชืงื™ืŸ ืงื•ื‘ืงื˜ืœ - ื›ืœื™ ืฉื•ืจืช ืคืงื•ื“ื” ืœืขื‘ื•ื“ื” ืื™ืชื• ืงื•ื‘ืจื ื˜.

    gcloud components install kubectl

  4. ืœื”ืชืงื™ืŸ Docker Community Edition (CE). ืืชื” ืชืฉืชืžืฉ ื‘ื›ืœื™ ืฉื•ืจืช ื”ืคืงื•ื“ื” ืกึทื•ึธืจื›ื“ื™ ืœื™ืฆื•ืจ ืชืžื•ื ื•ืช ืžื™ื›ืœ ืขื‘ื•ืจ ื”ื™ื™ืฉื•ื ืœื“ื•ื’ืžื”.

  5. ื”ืชืงืŸ ืืช ื”ื›ืœื™ ื‘ืงืจืช ื’ืจืกืื•ืช ืฉืœ Gitื›ื“ื™ ืœืงื‘ืœ ืืช ื”ื™ื™ืฉื•ื ืœื“ื•ื’ืžื” ืž- GitHub.

ื”ื•ืจื“ ืงื•ื“ ืœื“ื•ื’ืžื”

  1. ื”ื•ืจื“ ืืช ืงื•ื“ ื”ืžืงื•ืจ ืฉืœื•ื ืฉืจืช:

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

  2. ืขื‘ื•ืจ ืืœ ืกืคืจื™ื™ืช ื”ืงื•ื“ ืœื“ื•ื’ืžื”:

    cd istio-samples/sample-apps/helloserver

ื—ืงืจ ืืคืœื™ืงืฆื™ื” ืขื ืžืกืคืจ ืฉื™ืจื•ืชื™ื

ื”ื™ื™ืฉื•ื ืœื“ื•ื’ืžื” ื›ืชื•ื‘ ื‘-Python ื•ืžื•ืจื›ื‘ ืžืฉื ื™ ืจื›ื™ื‘ื™ื ื”ืžืงื™ื™ืžื™ื ืื™ื ื˜ืจืืงืฆื™ื” ื‘ืืžืฆืขื•ืช REST:

  • ืฉืจืช: ืฉืจืช ืคืฉื•ื˜ ืขื ื ืงื•ื“ืช ืงืฆื” ืื—ืช ืœืงื‘ืœ, /, ืฉืžื“ืคื™ืก "ืฉืœื•ื ืขื•ืœื" ืœืงื•ื ืกื•ืœื”.
  • loadgen: ืกืงืจื™ืคื˜ ืฉืฉื•ืœื— ืชื ื•ืขื” ืืœ ืฉืจืช, ืขื ืžืกืคืจ ื ื™ืชืŸ ืœื”ื’ื“ืจื” ืฉืœ ื‘ืงืฉื•ืช ื‘ืฉื ื™ื™ื”.

ื”ื›ื ืช ืืคืœื™ืงืฆื™ื” ืœืื™ืกื˜ื™ื•

ื”ืคืขืœืช ืืคืœื™ืงืฆื™ื” ืžืงื•ื“ ื”ืžืงื•ืจ

ื›ื“ื™ ืœื—ืงื•ืจ ืืช ื”ื™ื™ืฉื•ื ืœื“ื•ื’ืžื”, ื”ืคืขืœ ืื•ืชื• ื‘-Cloud Shell ืื• ื‘ืžื—ืฉื‘ ืฉืœืš.
1) ื‘ืงื˜ืœื•ื’ istio-samples/sample-apps/helloserver ืœึธืจื•ึผืฅ ืฉืจืช:

python3 server/server.py

ื›ืฉืืชื” ืจืฅ ืฉืจืช ืžื•ืฆื’ื™ื ื”ื“ื‘ืจื™ื ื”ื‘ืื™ื:

INFO:root:Starting server...

2) ืคืชื— ื—ืœื•ืŸ ื˜ืจืžื™ื ืœ ื ื•ืกืฃ ื›ื“ื™ ืœืฉืœื•ื— ืืœื™ื• ื‘ืงืฉื•ืช ืฉืจืช. ืื ืืชื” ืžืฉืชืžืฉ ื‘-Cloud Shell, ืœื—ืฅ ืขืœ ืกืžืœ ื”ื”ื•ืกืคื” ื›ื“ื™ ืœืคืชื•ื— ื”ืคืขืœื” ื ื•ืกืคืช.
3) ืฉืœื— ื‘ืงืฉื” ืœ ืฉืจืช:

curl http://localhost:8080

ืฉืจืช ืขื•ื ื”:

Hello World!

4) ืžื”ืกืคืจื™ื™ื” ืฉื‘ื” ื”ื•ืจื“ืช ืืช ื”ืงื•ื“ ืœื“ื•ื’ืžื”, ืขื‘ื•ืจ ืœืกืคืจื™ื™ื” ืฉืžื›ื™ืœื” loadgen:

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

5) ืฆื•ืจ ืืช ืžืฉืชื ื™ ื”ืกื‘ื™ื‘ื” ื”ื‘ืื™ื:

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

6) ื”ืฉืงื” ื•ื™ืจื˜ื•ืืœื™:

virtualenv --python python3 env

7) ื”ืคืขืœ ืืช ื”ืกื‘ื™ื‘ื” ื”ื•ื™ืจื˜ื•ืืœื™ืช:

source env/bin/activate

8) ื”ื’ื“ืจ ื“ืจื™ืฉื•ืช ืขื‘ื•ืจ loadgen:

pip3 install -r requirements.txt

9) ื”ืฉืงื” loadgen:

python3 loadgen.py

ื›ืฉืืชื” ืจืฅ loadgen ืžืฆื™ื’ ืžืฉื”ื• ื›ืžื• ื”ื”ื•ื“ืขื” ื”ื‘ืื”:

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). ืœื›ืŸ ืืชื” ื™ื›ื•ืœ ืœื”ืฉืชืžืฉ localhostืœืฉืœื•ื— ื‘ืงืฉื•ืช ืืœื™ื• ืฉืจืช.
10) ืœืขืฆื•ืจ loadgen ะธ ืฉืจืช, ืœื”ื™ื›ื ืก Ctrl-c ื‘ื›ืœ ื—ืœื•ืŸ ืžืกื•ืฃ.
11) ื‘ื—ืœื•ืŸ ื”ื˜ืจืžื™ื ืœ loadgen ื”ืฉื‘ืช ืืช ื”ืกื‘ื™ื‘ื” ื”ื•ื™ืจื˜ื•ืืœื™ืช:

deactivate

ืืจื™ื–ืช ืืคืœื™ืงืฆื™ื” ื‘ืžื™ื›ืœื™ื

ื›ื“ื™ ืœื”ืคืขื™ืœ ืืช ื”ื™ื™ืฉื•ื ื‘-GKE, ืขืœื™ืš ืœืืจื•ื– ืืช ื”ื™ื™ืฉื•ื ืœื“ื•ื’ืžื” - ืฉืจืช ะธ loadgen - ืคื ื™ืžื” ืžื›ื•ืœื•ืช. ืžื™ื›ืœ ื”ื•ื ื“ืจืš ืœืืจื•ื– ื™ื™ืฉื•ื ื›ื“ื™ ืœื‘ื•ื“ื“ ืื•ืชื• ืžื”ืกื‘ื™ื‘ื” ืฉืœื•.

ื›ื“ื™ ืœืืจื•ื– ื™ื™ืฉื•ื ืœืชื•ืš ืžื™ื›ืœ, ืืชื” ืฆืจื™ืš ื“ื•ืงืจืคื™ืœ. ื“ื•ืงืจืคื™ืœ ื”ื•ื ืงื•ื‘ืฅ ื˜ืงืกื˜ ื”ืžื’ื“ื™ืจ ืคืงื•ื“ื•ืช ืœื‘ื ื™ื™ืช ืงื•ื“ ื”ืžืงื•ืจ ืฉืœ ื”ื™ื™ืฉื•ื ื•ื”ืชืœื•ืช ืฉืœื• ืชืžื•ื ืช ื“ื•ืงืจ. ืœืื—ืจ ื”ื‘ื ื™ื™ื”, ืืชื” ืžืขืœื” ืืช ื”ืชืžื•ื ื” ืœืจื™ืฉื•ื ืžื™ื›ืœ ื›ื’ื•ืŸ Docker Hub ืื• ืจื™ืฉื•ื ืžื™ื›ืœื™ื.

ื”ื“ื•ื’ืžื” ื›ื‘ืจ ืงื™ื™ืžืช ื“ื•ืงืจืคื™ืœ ืขื‘ื•ืจ ืฉืจืช ะธ loadgen ืขื ื›ืœ ื”ืคืงื•ื“ื•ืช ื”ื“ืจื•ืฉื•ืช ืœืื™ืกื•ืฃ ืชืžื•ื ื•ืช. ืœืžื˜ื” - ื“ื•ืงืจืคื™ืœ ืขื‘ื•ืจ ืฉืจืช:

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

  • ืงื‘ื•ืฆื” ืžืคื™ืชื•ืŸ:3-ื“ืง ื›ื‘ืกื™ืก ืื•ืžืจ ืœ-Docker ืœื”ืฉืชืžืฉ ื‘ื’ืจืกื” ื”ืขื“ื›ื ื™ืช ื‘ื™ื•ืชืจ ืชืžื•ื ื” ืฉืœ Python 3 ื›ื‘ืกื™ืก.
  • ืงื‘ื•ืฆื” ืขื•ืชืง. . ืžืขืชื™ืง ืืช ืงื‘ืฆื™ ื”ืžืงื•ืจ ืœืกืคืจื™ื™ืช ื”ืขื‘ื•ื“ื” ื”ื ื•ื›ื—ื™ืช (ื‘ืžืงืจื” ืฉืœื ื• ื‘ืœื‘ื“ server.py) ืœืžืขืจื›ืช ื”ืงื‘ืฆื™ื ืฉืœ ื”ืžื›ื•ืœื”.
  • ื ืงื•ื“ืช ื›ื ื™ืกื” ืžื’ื“ื™ืจ ืืช ื”ืคืงื•ื“ื” ื”ืžืฉืžืฉืช ืœื”ืคืขืœืช ื”ืžื™ื›ืœ. ื‘ืžืงืจื” ืฉืœื ื•, ื”ืคืงื•ื“ื” ื”ื–ื• ื›ืžืขื˜ ื–ื”ื” ืœื–ื• ืฉื ื”ื’ืช ืœื”ืจื™ืฅ server.py ืžืงื•ื“ ื”ืžืงื•ืจ.
  • ืงื‘ื•ืฆื” ืœึทื—ืฉื‚ื•ึนืฃ ืžืขื™ื“ ืขืœ ื›ืš ืฉืจืช ืžื—ื›ื” ืœื ืชื•ื ื™ื ื“ืจืš ื”ื™ืฆื™ืื” 8080. ื”ืฆื•ื•ืช ื”ื–ื” ืœื ืžืกืคืง ื™ืฆื™ืื•ืช. ื–ื”ื• ืกื•ื’ ืฉืœ ืชื™ืขื•ื“ ืฉื“ืจื•ืฉ ืœืคืชื™ื—ืช ื”ื ืžืœ 8080 ื‘ืขืช ื”ืคืขืœืช ื”ืžื™ื›ืœ.

ืžืชื›ื•ื ืŸ ืœืื›ืœืก ืืช ื”ื‘ืงืฉื” ืฉืœืš

1) ื”ื’ื“ืจ ืืช ืžืฉืชื ื™ ื”ืกื‘ื™ื‘ื” ื”ื‘ืื™ื. ื”ื—ืœืฃ PROJECT_ID ืœืžื–ื”ื” ืคืจื•ื™ืงื˜ GCP ืฉืœืš.

export PROJECT_ID="PROJECT_ID"

export GCR_REPO="preparing-istio"

ืฉื™ืžื•ืฉ ื‘ืขืจื›ื™ื PROJECT_ID ะธ GCR_REPO ืืชื” ืžืชื™ื™ื’ ืืช ืชืžื•ื ืช Docker ื›ืฉืืชื” ื‘ื•ื ื” ืื•ืชื” ื•ื“ื•ื—ืฃ ืื•ืชื” ืœืจื™ืฉื•ื ืžื™ื›ืœ ืคืจื˜ื™.

2) ื”ื’ื“ืจ ืืช ืคืจื•ื™ืงื˜ GCP ื”ืžื•ื’ื“ืจ ื›ื‘ืจื™ืจืช ืžื—ื“ืœ ืขื‘ื•ืจ ื›ืœื™ ืฉื•ืจืช ื”ืคืงื•ื“ื” gcloud.

gcloud config set project $PROJECT_ID

3) ื”ื’ื“ืจ ืืช ืื–ื•ืจ ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ืขื‘ื•ืจ ื›ืœื™ ืฉื•ืจืช ื”ืคืงื•ื“ื” gcloud.

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. ื”ืขืœื” ืืช ื”ืชืžื•ื ื” ืœ-Container Registry:
    docker push gcr.io/$PROJECT_ID/$GCR_REPO/helloserver:v0.0.1

ืžื™ื›ืœื™ื•ืช ืฉืœ loadgen

1) ืขื‘ื•ืจ ืœืกืคืจื™ื™ื” ืฉื‘ื” ื ืžืฆืืช ื”ื“ื•ื’ืžื” loadgen:

cd ../loadgen

2) ืืกื•ืฃ ืืช ื”ืชืžื•ื ื”:

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

3) ื”ืขืœื” ืืช ื”ืชืžื•ื ื” ืœ-Container Registry:

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

ืงื‘ื•ืฆื” gcloud ื™ื•ืฆืจ ืืฉื›ื•ืœ ืžื•ื›ืŸ ื‘ืคืจื•ื™ืงื˜ GCP ื•ื‘ืื–ื•ืจ ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ืฉืฆื™ื™ื ืช. ื›ื“ื™ ืœื”ืคืขื™ืœ ืืช Istio, ืื ื• ืžืžืœื™ืฆื™ื ืœื”ื—ื–ื™ืง ืœืคื—ื•ืช 4 ืฆืžืชื™ื ื•ืžื›ื•ื ื” ื•ื™ืจื˜ื•ืืœื™ืช n1-standard-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:

ื”ื›ื ืช ืืคืœื™ืงืฆื™ื” ืœืื™ืกื˜ื™ื•

ืœืคื ื™ ืฉืืชื” ืคื•ืจืก ืงื•ื ื˜ื™ื™ื ืจื™ื ื‘-GKE, ืœืžื“ ืืช ืžื•ืฉื’ื™ ื”ืžืคืชื— ืฉืœ Kubernetes. ื™ืฉ ืงื™ืฉื•ืจื™ื ืžืžืฉ ื‘ืกื•ืฃ ืื ืืชื” ืจื•ืฆื” ืœืœืžื•ื“ ืขื•ื“.

  • ืฆืžืชื™ื ื•ืืฉื›ื•ืœื•ืช. ื‘-GKE, ืฆื•ืžืช ื”ื•ื ืžื›ื•ื ื” ื•ื™ืจื˜ื•ืืœื™ืช. ื‘ืคืœื˜ืคื•ืจืžื•ืช ืื—ืจื•ืช ืฉืœ Kubernetes, ืฆื•ืžืช ื™ื›ื•ืœ ืœื”ื™ื•ืช ืžื—ืฉื‘ ืื• ืžื›ื•ื ื” ื•ื™ืจื˜ื•ืืœื™ืช. ืืฉื›ื•ืœ ื”ื•ื ืื•ืกืฃ ืฉืœ ืฆืžืชื™ื ืฉื™ื›ื•ืœื™ื ืœื”ื™ื—ืฉื‘ ืœื™ื—ื™ื“ื” ืื—ืช ืฉื‘ื” ืืชื” ืคื•ืจืก ื™ื™ืฉื•ื ืขื ืžื™ื›ืœ.
  • ืชืจืžื™ืœื™ื. ื‘-Kubernetes, ืžื›ื•ืœื•ืช ืคื•ืขืœื•ืช ื‘ืชืจืžื™ืœื™ื. Pod in Kubernetes ื”ื•ื ื™ื—ื™ื“ื” ื‘ืœืชื™ ื ื™ืชื ืช ืœื—ืœื•ืงื”. ืคื•ื“ ืžื›ื™ืœ ืžื™ื›ืœ ืื—ื“ ืื• ื™ื•ืชืจ. ืืชื” ืคื•ืจืก ืงื•ื ื˜ื™ื™ื ืจื™ื ืฉืœ ืฉืจืชื™ื ื• loadgen ื‘ืชืจืžื™ืœื™ื ื ืคืจื“ื™ื. ื›ืืฉืจ ื™ืฉื ื ืžืกืคืจ ืžื›ื•ืœื•ืช ื‘ืคื•ื“ (ืœื“ื•ื’ืžื”, ืฉืจืช ื™ื™ืฉื•ืžื™ื ื• ืฉืจืช ืคืจื•ืงืกื™), ืžื›ื•ืœื•ืช ืžื ื•ื”ืœื•ืช ื›ื™ืฉื•ืช ืื—ืช ื•ืžืฉืชืคื•ืช ืžืฉืื‘ื™ ืคื•ื“.
  • ืคืจื™ืกื•ืช. ื‘-Kubernetes, ืคืจื™ืกื” ื”ื™ื ืื•ื‘ื™ื™ืงื˜ ืฉื”ื•ื ืื•ืกืฃ ืฉืœ ืชืจืžื™ืœื™ื ื–ื”ื™ื. ื”ืคืจื™ืกื” ืžืฉื™ืงื” ื”ืขืชืงื™ื ืžืจื•ื‘ื™ื ืฉืœ ืชืจืžื™ืœื™ื ื”ืžืคื•ื–ืจื™ื ืขืœ ืคื ื™ ืฆืžืชื™ ืืฉื›ื•ืœ. ื”ืคืจื™ืกื” ืžื—ืœื™ืคื” ืื•ื˜ื•ืžื˜ื™ืช ืคื•ื“ื™ื ืฉื ื›ืฉืœื• ืื• ืฉืื™ื ื ืžื’ื™ื‘ื™ื.
  • ืฉื™ืจื•ืช Kubernetes. ื‘ืขืช ื”ืคืขืœืช ืงื•ื“ ื™ื™ืฉื•ื ื‘-GKE, ื”ื—ื™ื‘ื•ืจ ื‘ื™ืŸ loadgen ะธ ืฉืจืช. ื›ืืฉืจ ื”ืชื—ืœืช ืฉื™ืจื•ืชื™ื ื‘ืžื—ืฉื‘ ื•ื™ืจื˜ื•ืืœื™ ืื• ื‘ืฉื•ืœื—ืŸ ื”ืขื‘ื•ื“ื” ืฉืœ Cloud Shell, ืฉืœื—ืช ื‘ืงืฉื•ืช ืืœ ืฉืจืช ะฟะพ ะฐะดั€ะตััƒ 8080. ืœืื—ืจ ื”ืคืจื™ืกื” ืœ-GKE, ื”ืคื•ื“ื™ื ืžื‘ื•ืฆืขื™ื ืขืœ ืฆืžืชื™ื ื–ืžื™ื ื™ื. ื›ื‘ืจื™ืจืช ืžื—ื“ืœ, ืื™ืŸ ืœืš ืฉืœื™ื˜ื” ืขืœ ืื™ื–ื” ืฆื•ืžืช ื”ืคื•ื“ ืคื•ืขืœ, ืื– ืืชื” ืชืจืžื™ืœื™ื ืื™ืŸ ื›ืชื•ื‘ื•ืช IP ืงื‘ื•ืขื•ืช.
    ื›ื“ื™ ืœืงื‘ืœ ื›ืชื•ื‘ืช IP ืขื‘ื•ืจ ืฉืจืช, ืขืœื™ืš ืœื”ื’ื“ื™ืจ ื”ืคืฉื˜ืช ืจืฉืช ืขืœ ื’ื‘ื™ ื”ืคื•ื“ื™ื. ื–ื” ืžื” ืฉื–ื” ืฉื™ืจื•ืช Kubernetes. ืฉื™ืจื•ืช Kubernetes ืžืกืคืง ื ืงื•ื“ืช ืงืฆื” ืžืชืžืฉื›ืช ืขื‘ื•ืจ ืงื‘ื•ืฆื” ืฉืœ ืชืจืžื™ืœื™ื. ื™ืฉ ื›ืžื” ืกื•ื’ื™ ืฉื™ืจื•ืชื™ื. ืฉืจืช ะธัะฟะพะปัŒะทัƒะตั‚ LoadBalancer, ื”ืžืกืคืง ื›ืชื•ื‘ืช IP ื—ื™ืฆื•ื ื™ืช ืœื™ืฆื™ืจืช ืงืฉืจ ืฉืจืช ืžื—ื•ืฅ ืœืืฉื›ื•ืœ.
    ืœ-Kubernetes ื™ืฉ ื’ื ืžืขืจื›ืช DNS ืžื•ื‘ื ื™ืช ืฉืžืงืฆื” ืฉืžื•ืช DNS (ืœื“ื•ื’ืžื”, helloserver.default.cluster.local) ืฉื™ืจื•ืชื™ื. ื”ื•ื“ื•ืช ืœื›ืš, ืคื•ื“ื™ื ื‘ืชื•ืš ื”ืืฉื›ื•ืœ ืžืชืงืฉืจื™ื ืขื ืคื•ื“ื™ื ืื—ืจื™ื ื‘ืืฉื›ื•ืœ ื‘ื›ืชื•ื‘ืช ืงื‘ื•ืขื”. ืœื ื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘ืฉื ื”-DNS ืžื—ื•ืฅ ืœืืฉื›ื•ืœ, ื›ื’ื•ืŸ ื‘-Cloud Shell ืื• ื‘ืžื—ืฉื‘.

Kubernetes ืžื ื™ืคืกื˜

ื›ืฉื”ืจืฆืช ืืช ื”ื™ื™ืฉื•ื ืžื”ืžืงื•ืจ, ื”ืฉืชืžืฉืช ื‘ืคืงื•ื“ื” ื”ืฆื™ื•ื•ื™ืช ืคื™ืชื•ืŸ 3

server.py

ืฆื™ื•ื•ื™ ืžืจืžื– ืขืœ ืคื•ืขืœ: "ืขืฉื” ื–ืืช."

Kubernetes ืžืฉืชืžืฉ ืžื•ื“ืœ ื”ืฆื”ืจืชื™. ื–ื” ืื•ืžืจ ืฉืื ื—ื ื• ืœื ืื•ืžืจื™ื ืœ-Kubernetes ื‘ื“ื™ื•ืง ืžื” ืœืขืฉื•ืช, ืืœื ืžืชืืจื™ื ืืช ื”ืžืฆื‘ ื”ืจืฆื•ื™. ืœื“ื•ื’ืžื”, Kubernetes ืžืคืขื™ืœ ื•ืžืคืกื™ืง ืชืจืžื™ืœื™ื ืœืคื™ ื”ืฆื•ืจืš ื›ื“ื™ ืœืฉืžื•ืจ ืขืœ ื”ืžืฆื‘ ื‘ืคื•ืขืœ ืฉืœ ื”ืžืขืจื›ืช ื‘ื”ืชืื ืœืžืฆื‘ ื”ืจืฆื•ื™.

ืืชื” ืžืฆื™ื™ืŸ ืืช ื”ืžืฆื‘ ื”ืจืฆื•ื™ ื‘ืžื ื™ืคืกื˜ื™ื ืื• ื‘ืงื‘ืฆื™ื ื™ืžืœ. ืงื•ื‘ืฅ YAML ืžื›ื™ืœ ืžืคืจื˜ื™ื ืขื‘ื•ืจ ืื•ื‘ื™ื™ืงื˜ Kubernetes ืื—ื“ ืื• ื™ื•ืชืจ.

ื”ื“ื•ื’ืžื” ืžื›ื™ืœื” ืงื•ื‘ืฅ YAML ืขื‘ื•ืจ ืฉืจืช ะธ loadgen. ื›ืœ ืงื•ื‘ืฅ YAML ืžืฆื™ื™ืŸ ืืช ื”ืžืฆื‘ ื”ืจืฆื•ื™ ืฉืœ ืื•ื‘ื™ื™ืงื˜ ื”ืคืจื™ืกื” ื•ืฉื™ืจื•ืช Kubernetes.

server.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

  • ืกื•ื’ ืžืฆื™ื™ืŸ ืืช ืกื•ื’ ื”ืื•ื‘ื™ื™ืงื˜.
  • metadata.name ืžืฆื™ื™ืŸ ืืช ืฉื ื”ืคืจื™ืกื”.
  • ืฉื“ื” ืจืืฉื•ืŸ ืžืคืจื˜ ืžื›ื™ืœ ืชื™ืื•ืจ ืฉืœ ื”ืžืฆื‘ ื”ืจืฆื•ื™.
  • spec.replicas ืžืฆื™ื™ืŸ ืืช ื”ืžืกืคืจ ื”ืจืฆื•ื™ ืฉืœ ืชืจืžื™ืœื™ื.
  • ืกืขื™ืฃ spec.template ืžื’ื“ื™ืจ ืชื‘ื ื™ืช ืคื•ื“. ื™ืฉ ืฉื“ื” ื‘ืžืคืจื˜ ื”ืคื•ื“ ืชืžื•ื ื”, ื”ืžืฆื™ื™ืŸ ืืช ืฉื ื”ืชืžื•ื ื” ืฉื™ืฉ ืœื—ืœืฅ ืž-Container Registry.

ื”ืฉื™ืจื•ืช ืžื•ื’ื“ืจ ื›ืš:

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

  • LoadBalancer: ืœืงื•ื—ื•ืช ืฉื•ืœื—ื™ื ื‘ืงืฉื•ืช ืœื›ืชื•ื‘ืช ื”-IP ืฉืœ ืžืื–ืŸ ื”ืขื•ืžืก, ืฉื™ืฉ ืœื” ื›ืชื•ื‘ืช IP ืงื‘ื•ืขื” ื•ื ื’ื™ืฉื” ืžื—ื•ืฅ ืœืืฉื›ื•ืœ.
  • targetPort: ื›ื–ื›ื•ืจ, ื”ืฆื•ื•ืช ื—ืฉื™ืคื” 8080 ะฒ ื“ื•ืงืจืคื™ืœ ืœื ืกื™ืคืง ื™ืฆื™ืื•ืช. ืืชื” ืžืกืคืง ืืช ื”ื ืžืœ 8080ื›ื“ื™ ืฉืชื•ื›ืœ ืœื™ืฆื•ืจ ืงืฉืจ ืขื ื”ืžื›ื•ืœื” ืฉืจืช ืžื—ื•ืฅ ืœืืฉื›ื•ืœ. ื‘ืžืงืจื” ืฉืœื ื• hellosvc.default.cluster.local:80 (ืฉื ืงืฆืจ: hellosvc) ืžืชืื™ื ืœื™ืฆื™ืื” 8080 ื›ืชื•ื‘ื•ืช IP ืฉืœ ืคื•ื“ ืฉืœื•ื ืฉืจืช.
  • ื ืžืœ: ื–ื”ื• ืžืกืคืจ ื”ื™ืฆื™ืื” ืืœื™ื• ื™ืฉืœื—ื• ืฉื™ืจื•ืชื™ื ืื—ืจื™ื ื‘ืืฉื›ื•ืœ ื‘ืงืฉื•ืช.

loadgen.yaml

ืื•ื‘ื™ื™ืงื˜ ืคืจื™ืกื” ืœ loadgen.yaml ื ืจืื” ื›ืžื• server.yaml. ื”ื”ื‘ื“ืœ ื”ื•ื ืฉืื•ื‘ื™ื™ืงื˜ ื”ืคืจื™ืกื” ืžื›ื™ืœ ืงื˜ืข env. ื”ื•ื ืžื’ื“ื™ืจ ืืช ืžืฉืชื ื™ ื”ืกื‘ื™ื‘ื” ื”ื“ืจื•ืฉื™ื loadgen ื•ืืฉืจ ื”ืชืงื ืช ื‘ืขืช ื”ืคืขืœืช ื”ืืคืœื™ืงืฆื™ื” ืžื”ืžืงื•ืจ.

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

ื–ืžืŸ loadgen ืื™ื ื• ืžืงื‘ืœ ื‘ืงืฉื•ืช ื ื›ื ืกื•ืช, ืœืชื—ื•ื ืกื•ื’ ืฆื™ื™ืŸ ืืฉื›ื•ืœ 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) ืคืชื— server.yaml ื‘ืขื•ืจืš ื˜ืงืกื˜.
3) ื”ื—ืœืฃ ืืช ื”ืฉื ื‘ืฉื“ื” ืชืžื•ื ื” ืœืฉื ืชืžื•ื ืช Docker ืฉืœืš.

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

ื”ื—ืœืฃ PROJECT_ID ืœืžื–ื”ื” ืคืจื•ื™ืงื˜ GCP ืฉืœืš.
4) ืฉืžื•ืจ ื•ืกื’ื•ืจ server.yaml.
5) ืคืจื•ืก ืืช ืงื•ื‘ืฅ YAML ืœ-Kubernetes:

kubectl apply -f server.yaml

ืœืื—ืจ ืกื™ื•ื ืžื•ืฆืœื—, ื”ืคืงื•ื“ื” ืžื™ื™ืฆืจืช ืืช ื”ืงื•ื“ ื”ื‘ื:

deployment.apps/helloserver created
service/hellosvc created

6) ืขื‘ื•ืจ ืืœ ื”ืžื“ืจื™ืš ืฉื‘ื• loadgen:

cd ../loadgen

7) ืคืชื— loadgen.yaml ื‘ืขื•ืจืš ื˜ืงืกื˜.
8) ื”ื—ืœืฃ ืืช ื”ืฉื ื‘ืฉื“ื” ืชืžื•ื ื” ืœืฉื ืชืžื•ื ืช Docker ืฉืœืš.

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

ื”ื—ืœืฃ PROJECT_ID ืœืžื–ื”ื” ืคืจื•ื™ืงื˜ GCP ืฉืœืš.
9) ืฉืžื•ืจ ื•ืกื’ื•ืจ loadgen.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) ื—ืœืฅ ื™ื•ืžื ื™ ื™ื™ืฉื•ืžื™ื ืžื”ืคื•ื“ loadgen. ื”ื—ืœืฃ POD_ID ืœืžื–ื”ื” ืžื”ืชืฉื•ื‘ื” ื”ืงื•ื“ืžืช.

kubectl logs loadgenerator-POD_ID

13) ื”ืฉื’ ื›ืชื•ื‘ื•ืช IP ื—ื™ืฆื•ื ื™ื•ืช hellosvc:

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) ืฉืœื— ื‘ืงืฉื” ืœ hellosvc: ื”ื—ืœืฃ EXTERNAL_IP ืœื›ืชื•ื‘ืช IP ื—ื™ืฆื•ื ื™ืช hellosvc.

curl http://EXTERNAL_IP

ื‘ื•ืื• ื ืชืžื•ื“ื“ ืขื ืื™ืกื˜ื™ื•

ื›ื‘ืจ ื™ืฉ ืœืš ื™ื™ืฉื•ื ืฉื ืคืจืก ื‘-GKE. loadgen ื™ื›ื•ืœ ืœื”ืฉืชืžืฉ ื‘- Kubernetes DNS (hellosvc:80) ืœืฉืœื•ื— ื‘ืงืฉื•ืช ืืœื™ื”ื ืฉืจืชื•ืืชื” ื™ื›ื•ืœ ืœืฉืœื•ื— ื‘ืงืฉื•ืช ืœ ืฉืจืช ืœืคื™ ื›ืชื•ื‘ืช IP ื—ื™ืฆื•ื ื™ืช. ืœืžืจื•ืช ืฉืœ-Kubernetes ื™ืฉ ืชื›ื•ื ื•ืช ืจื‘ื•ืช, ื—ืกืจ ืžื™ื“ืข ืขืœ ื”ืฉื™ืจื•ืชื™ื:

  • ื›ื™ืฆื“ ืžืงื™ื™ืžื™ื ืฉื™ืจื•ืชื™ื? ืžื”ื ื”ื™ื—ืกื™ื ื‘ื™ืŸ ื”ืฉื™ืจื•ืชื™ื? ืื™ืš ื–ื•ืจืžืช ื”ืชืขื‘ื•ืจื” ื‘ื™ืŸ ืฉื™ืจื•ืชื™ื? ื”ืื ืืชื” ืžื•ื“ืข ืœื›ืš loadgen ืฉื•ืœื— ื‘ืงืฉื•ืช ืœ ืฉืจืช, ืื‘ืœ ืชืืจ ืœืขืฆืžืš ืฉืืชื” ืœื ื™ื•ื“ืข ื›ืœื•ื ืขืœ ื”ื™ื™ืฉื•ื. ื›ื“ื™ ืœืขื ื•ืช ืขืœ ืฉืืœื•ืช ืืœื•, ื”ื‘ื” ื ืกืชื›ืœ ืขืœ ืจืฉื™ืžืช ื”ืคื•ื“ื™ื ื”ืคื•ืขืœื™ื ื‘-GKE.
  • ืžื“ื“ื™ื. ื›ืžื” ื–ืžืŸ ืฉืจืช ืขื•ื ื” ืœื‘ืงืฉื” ื ื›ื ืกืช? ื›ืžื” ื‘ืงืฉื•ืช ื‘ืฉื ื™ื™ื” ืžืชืงื‘ืœื•ืช ืขืœ ื™ื“ื™ ื”ืฉืจืช? ื”ืื ื–ื” ื ื•ืชืŸ ื”ื•ื“ืขื•ืช ืฉื’ื™ืื”?
  • ืžื™ื“ืข ืื‘ื˜ื—ื”. ืชื ื•ืขื” ื‘ื™ืŸ loadgen ะธ ืฉืจืช ืคืฉื•ื˜ ืขื•ื‘ืจ HTTP ืื• ืขืœ ื™ื“ื™ mTLS?

ืื™ืกื˜ื™ื• ืขื•ื ื” ืขืœ ื›ืœ ื”ืฉืืœื•ืช ื”ืœืœื•. ืœืฉื ื›ืš, Istio ืžืฆื™ื‘ ืคืจื•ืงืกื™ ืฆื“ื“ื™ ืฉืึทื’ึฐืจึดื™ืจ ื‘ื›ืœ ืชืจืžื™ืœ. ื”-Proxy ืฉืœ Envoy ืžื™ื™ืจื˜ ืืช ื›ืœ ื”ืชืขื‘ื•ืจื” ื”ื ื›ื ืกืช ื•ื”ื™ื•ืฆืืช ืืœ ืžื™ื›ืœื™ ื™ื™ืฉื•ืžื™ื. ื–ื” ืื•ืžืจ ืฉ ืฉืจืช ะธ loadgen ืœืงื‘ืœ ื“ืจืš Proxy Sidecar Envoy, ื•ื›ืœ ื”ืชืขื‘ื•ืจื” ืžืžื ื• loadgen ะบ ืฉืจืช ืขื•ื‘ืจ ื“ืจืš ืคืจื•ืงืกื™ ื”-Envoy.

ื—ื™ื‘ื•ืจื™ื ื‘ื™ืŸ ื ืฆื™ื’ื™ ื”ืฉืœื™ื— ื™ื•ืฆืจื™ื ืจืฉืช ืฉื™ืจื•ืช. ืืจื›ื™ื˜ืงื˜ื•ืจืช ืจืฉืช ื”ืฉื™ืจื•ืช ืžืกืคืงืช ืฉื›ื‘ืช ืฉืœื™ื˜ื” ืขืœ ื’ื‘ื™ Kubernetes.

ื”ื›ื ืช ืืคืœื™ืงืฆื™ื” ืœืื™ืกื˜ื™ื•

ืžื›ื™ื•ื•ืŸ ืฉืคืจื•ืงืกื™ Envoy ืคื•ืขืœื™ื ื‘ืงื•ื ื˜ื™ื™ื ืจื™ื ืžืฉืœื”ื, ื ื™ืชืŸ ืœื”ืชืงื™ืŸ ืืช Istio ืขืœ ื’ื‘ื™ ืืฉื›ื•ืœ GKE ื›ืžืขื˜ ืœืœื ืฉื™ื ื•ื™ื™ื ื‘ืงื•ื“ ื”ืืคืœื™ืงืฆื™ื”. ืื‘ืœ ืขืฉื™ืช ืงืฆืช ืขื‘ื•ื“ื” ื›ื“ื™ ืœื”ื›ื™ืŸ ืืช ื”ื™ื™ืฉื•ื ืฉืœืš ืœื ื™ื”ื•ืœ ืขืœ ื™ื“ื™ Istio:

  • ืฉื™ืจื•ืชื™ื ืœื›ืœ ื”ืžื›ื•ืœื•ืช. ืœืคืจื™ืกื•ืช ืฉืจืช ะธ loadgen ืงืฉื•ืจ ืœืฉื™ืจื•ืช Kubernetes. ืึฒืคึดื™ืœื•ึผ loadgen, ืฉืื™ื ื• ืžืงื‘ืœ ื‘ืงืฉื•ืช ื ื›ื ืกื•ืช, ื™ืฉ ืฉื™ืจื•ืช.
  • ื ืžืœื™ื ื‘ืฉื™ืจื•ืชื™ื ื—ื™ื™ื‘ื™ื ืœื”ื™ื•ืช ื‘ืขืœื™ ืฉืžื•ืช. ืœืžืจื•ืช ืฉื ื™ืชืŸ ืœื”ืฉืื™ืจ ื™ืฆื™ืื•ืช ืฉื™ืจื•ืช ืœืœื ืฉื ื‘-GKE, Istio ื“ื•ืจืฉ ืžืžืš ืœืฆื™ื™ืŸ ืฉื ื”ื ืžืœ ื‘ื”ืชืื ืœืคืจื•ื˜ื•ืงื•ืœ ืฉืœื•. ื‘ืงื•ื‘ืฅ YAML ื”ืคื•ืจื˜ ืขื‘ื•ืจ ืฉืจืช ื ืงืจื httpื›ื™ ื”ืฉืจืช ืžืฉืชืžืฉ ื‘ืคืจื•ื˜ื•ืงื•ืœ HTTP... ืื ืฉืจื•ืช ื‘ืฉื™ืžื•ืฉ ื’ืจ"ืค, ืชื™ืชืŸ ืฉื ืœื ืžืœ grpc.
  • ืคืจื™ืกื•ืช ืžืกื•ืžื ื•ืช. ืœื›ืŸ, ื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘ืชื›ื•ื ื•ืช ื ื™ื”ื•ืœ ื”ืชืขื‘ื•ืจื” ืฉืœ Istio, ื›ืžื• ืคื™ืฆื•ืœ ืชืขื‘ื•ืจื” ื‘ื™ืŸ ื’ืจืกืื•ืช ืฉืœ ืื•ืชื• ืฉื™ืจื•ืช.

ื”ืชืงื ืช Istio

ื™ืฉื ืŸ ืฉืชื™ ื“ืจื›ื™ื ืœื”ืชืงื™ืŸ ืืช Istio. ืคื—ื™ืช ืืคืฉืจ Istio ืขืœ ืกื™ื•ืžืช GKE ืื• ื”ืชืงืŸ ืืช ื’ืจืกืช ื”ืงื•ื“ ื”ืคืชื•ื— ืฉืœ Istio ืขืœ ื”ืืฉื›ื•ืœ. ืขื Istio ื‘-GKE, ืืชื” ื™ื›ื•ืœ ืœื ื”ืœ ื‘ืงืœื•ืช ื”ืชืงื ื•ืช ื•ืฉื“ืจื•ื’ื™ื ืฉืœ Istio ืœืื•ืจืš ื›ืœ ืžื—ื–ื•ืจ ื”ื—ื™ื™ื ืฉืœ ืืฉื›ื•ืœ GKE. ืื ืืชื” ืจื•ืฆื” ืืช ื”ื’ืจืกื” ื”ืขื“ื›ื ื™ืช ื‘ื™ื•ืชืจ ืฉืœ Istio ืื• ืฉืœื™ื˜ื” ืจื‘ื” ื™ื•ืชืจ ืขืœ ืชืฆื•ืจืช ืœื•ื— ื”ื‘ืงืจื” ืฉืœ Istio, ื”ืชืงืŸ ืืช ื’ืจืกืช ื”ืงื•ื“ ื”ืคืชื•ื— ื‘ืžืงื•ื ื”ืชื•ืกืฃ Istio on GKE. ื›ื“ื™ ืœื”ื—ืœื™ื˜ ืขืœ ื”ื’ื™ืฉื”, ืงืจื ืืช ื”ืžืืžืจ ื”ืื ืื ื™ ืฆืจื™ืš ืืช Istio ื‘-GKE?.

ื‘ื—ืจ ืืคืฉืจื•ืช, ืงืจื ืืช ื”ืžื“ืจื™ืš ื”ืžืชืื™ื ื•ื‘ืฆืข ืืช ื”ื”ื•ืจืื•ืช ืœื”ืชืงื ืช Istio ื‘ืืฉื›ื•ืœ ืฉืœืš. ืื ืืชื” ืจื•ืฆื” ืœื”ืฉืชืžืฉ ื‘-Istio ืขื ื”ื™ื™ืฉื•ื ื”ื—ื“ืฉ ืฉืœืš ืฉื ืคืจืก, ืœืืคืฉืจ ื™ื™ืฉื•ื ืฆื“ื“ื™ื•ืช ืขื‘ื•ืจ ืžืจื—ื‘ ืฉืžื•ืช ื‘ืจื™ืจืช ืžื—ื“ืœ.

ื ื™ืงื•ื™

ื›ื“ื™ ืœื”ื™ืžื ืข ืžื—ื™ื•ื‘ ื—ืฉื‘ื•ืŸ Google Cloud Platform ืฉืœืš ืขื‘ื•ืจ ื”ืžืฉืื‘ื™ื ืฉื‘ื”ื ื”ืฉืชืžืฉืช ื‘ืžื“ืจื™ืš ื–ื”, ืžื—ืง ืืช ืืฉื›ื•ืœ ื”ืžื›ื™ืœื™ื ืœืื—ืจ ืฉื”ืชืงื ืช ืืช Istio ื•ืฉื™ื—ืงืช ืขื ื”ื™ื™ืฉื•ื ืœื“ื•ื’ืžื”. ืคืขื•ืœื” ื–ื• ืชืกื™ืจ ืืช ื›ืœ ืžืฉืื‘ื™ ื”ืืฉื›ื•ืœ, ื›ื’ื•ืŸ ืžื•ืคืขื™ ืžื—ืฉื•ื‘, ื“ื™ืกืงื™ื ื•ืžืฉืื‘ื™ ืจืฉืช.

ืžื” ื”ืœืื”?

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”