Istio ã¯ãåæ£ã¢ããªã±ãŒã·ã§ã³ã®æ¥ç¶ãä¿è·ãç£èŠã«äŸ¿å©ãªããŒã«ã§ãã Istio ã¯ãã¢ããªã±ãŒã·ã§ã³ ã³ãŒããšãããã€ã¡ã³ãã®äŸåé¢ä¿ãããã±ãŒãžåããã³ã³ãããŒãããããã®ã³ã³ãããŒã管çãã Kubernetes ãªã©ããœãããŠã§ã¢ã倧èŠæš¡ã«å®è¡ããã³ç®¡çããããã«ããŸããŸãªãã¯ãããžãŒã䜿çšããŸãã ãããã£ãŠãIstio ã䜿çšããã«ã¯ããããã®ãã¯ãããžãŒã«åºã¥ããè€æ°ã®ãµãŒãã¹ãåããã¢ããªã±ãŒã·ã§ã³ãã©ã®ããã«åäœããããç¥ãå¿
èŠããããŸãã без ã€ã¹ãã£ãªã ãããã®ããŒã«ãšæŠå¿µã«ãã§ã«æ
£ããŠããå Žåã¯ããã®ãã¥ãŒããªã¢ã«ãã¹ãããããŠããã®ã»ã¯ã·ã§ã³ã«çŽæ¥é²ãã§ãã ããã
ããã¯ããœãŒã¹ã³ãŒããã GKE ã³ã³ãããŸã§ã®ããã»ã¹å šäœã段éçã«èª¬æããäŸãéããŠãããã®ãã¯ãããžãŒã®åºæ¬ãç解ã§ããããã«ããã¹ããããã€ã¹ãããã®ã¬ã€ãã§ãã ãŸããIstio ããããã®ãã¯ãããžãŒã®åãã©ã®ããã«æŽ»çšããŠãããã«ã€ããŠã説æããŸãã ããã¯ãã³ã³ãããŒãKubernetesããµãŒãã¹ ã¡ãã·ã¥ããŸã㯠Istio ã«ã€ããŠäœãç¥ããªãããšãåæãšããŠããŸãã
ã¿ã¹ã¯
ãã®ãã¥ãŒããªã¢ã«ã§ã¯ã次ã®ã¿ã¹ã¯ãå®äºããŸãã
- è€æ°ã®ãµãŒãã¹ã䜿çšããåçŽãª Hello World ã¢ããªã±ãŒã·ã§ã³ãåŠç¿ããŸãã
- ãœãŒã¹ã³ãŒãããã¢ããªã±ãŒã·ã§ã³ãå®è¡ããŸãã
- ã¢ããªã±ãŒã·ã§ã³ãã³ã³ããã«ããã±ãŒãžåããŸãã
- Kubernetes ã¯ã©ã¹ã¿ãŒã®äœæã
- ã³ã³ãããã¯ã©ã¹ã¿ãŒã«ãããã€ããŸãã
å§ããåã«
æé ã«åŸã£ãŠ Kubernetes Engine API ãæå¹ã«ããŸãã
- ã«è¡ã
Kubernetes ãšã³ãžã³ã®ããŒãž Google Cloud Platform ã³ã³ãœãŒã«ã§ã - ãããžã§ã¯ããäœæãŸãã¯éžæããŸãã
- API ãšé¢é£ãµãŒãã¹ãæå¹ã«ãªããŸã§åŸ ã¡ãŸãã ããã«ã¯æ°åãããå ŽåããããŸãã
- Google Cloud Platform ãããžã§ã¯ãã«å¯ŸããŠèª²éãèšå®ãããŠããããšã確èªããŠãã ããã
課éãæå¹ã«ããæ¹æ³ãåŠã¶ .
ãã®ãã¥ãŒããªã¢ã«ã§ã¯ãä»®æ³ãã·ã³ãæºåãã Cloud Shell ã䜿çšã§ããŸãã
ãªãã·ã§ã³ A: Cloud Shell ã䜿çšãã
Cloud Shell ã䜿çšããå©ç¹:
- Python 2 ããã³ Python 3 éçºç°å¢ (以äžãå«ã) virtualenv) ã¯å®å šã«æ§æãããŠããŸãã
- ã³ãã³ãã©ã€ã³ããŒã« gã¯ã©ãŠã, ããã«ãŒ, git О ãã¥ãŒãã¯ã«ãããã䜿çšãã ã¯ãã§ã«ã€ã³ã¹ããŒã«ãããŠããŸãã
- ããã€ãéžæã§ããŸã
ããã¹ããšãã£ã¿ :ã³ãŒããšãã£ã¿ãŒ ãã¯ãªãã¯ãããšãCloud Shell ãŠã£ã³ããŠã®äžéšã«ç·šéã¢ã€ã³ã³ã衚瀺ãããŸãã- EmacsãVimããŸã㯠NanoãCloud Shell ã®ã³ãã³ãã©ã€ã³ããéããŸãã
䜿çšããã«ã¯
- GCP ã³ã³ãœãŒã«ã«ç§»åããŸãã
- ãã¬ã¹ ã¯ã©ãŠã ã·ã§ã«ãæå¹ã«ãã GCP ã³ã³ãœãŒã« ãŠã£ã³ããŠã®äžéšã«ãã (Cloud Shell ãã¢ã¯ãã£ãã«ãã)ã
äžéšã«
ãªãã·ã§ã³ B: ã³ãã³ã ã©ã€ã³ ããŒã«ãããŒã«ã«ã§äœ¿çšãã
Linux ãŸã㯠macOS ãå®è¡ããŠããã³ã³ãã¥ãŒã¿ãŒã§äœæ¥ããå Žåã¯ã次ã®ã³ã³ããŒãã³ããæ§æããŠã€ã³ã¹ããŒã«ããå¿ èŠããããŸãã
-
ã«ã¹ã¿ãã€ãº
Python 3 ããã³ Python 2 éçºç°å¢ . -
ã¯ã©ãŠãSDKãã€ã³ã¹ããŒã«ãã ã³ãã³ãã©ã€ã³ããŒã«ã䜿ã£ãŠ gã¯ã©ãŠã. -
ã»ãã ãã¥ãŒãã¯ã« - äœæ¥çšã®ã³ãã³ãã©ã€ã³ããŒã«
Kubernetes .gcloud components install kubectl
-
ã»ãã
Docker ã³ãã¥ãã㣠ãšãã£ã·ã§ã³ (CE) ã ã³ãã³ãã©ã€ã³ããŒã«ã䜿çšããŸã ããã«ãŒãµã³ãã« ã¢ããªã±ãŒã·ã§ã³ã®ã³ã³ãã ã€ã¡ãŒãžãäœæããŸãã -
ããŒã«ãã€ã³ã¹ããŒã«ãã
Gitã®ããŒãžã§ã³ç®¡ç GitHub ãããµã³ãã« ã¢ããªã±ãŒã·ã§ã³ãå ¥æããŸãã
ãµã³ãã«ã³ãŒããããŠã³ããŒã
-
ãœãŒã¹ã³ãŒããããŠã³ããŒããã ããã«ã¡ã¯ãµãŒããŒ:
git clone https://github.com/GoogleCloudPlatform/istio-samples
-
ãµã³ãã« ã³ãŒã ãã£ã¬ã¯ããªã«ç§»åããŸãã
cd istio-samples/sample-apps/helloserver
è€æ°ã®ãµãŒãã¹ãå«ãã¢ããªã±ãŒã·ã§ã³ã®æ¢çŽ¢
ãµã³ãã« ã¢ããªã±ãŒã·ã§ã³ã¯ Python ã§æžãããŠããã以äžã䜿çšããŠå¯Ÿè©±ãã XNUMX ã€ã®ã³ã³ããŒãã³ãã§æ§æãããŠããŸãã
- : ãšã³ããã€ã³ãã XNUMX ã€ããã·ã³ãã«ãªãµãŒã㌠åŸãã /ããhello worldããã³ã³ãœãŒã«ã«åºåããŸãã
- ããŒããžã§ã: ãã©ãã£ãã¯ãéä¿¡ããã¹ã¯ãªãã ãXNUMX ç§ãããã®ãªã¯ãšã¹ãæ°ãæ§æã§ããŸãã
ãœãŒã¹ã³ãŒãããã¢ããªã±ãŒã·ã§ã³ãå®è¡ãã
ãµã³ãã« ã¢ããªã±ãŒã·ã§ã³ãæ¢çŽ¢ããã«ã¯ã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 ã§ã¢ããªã±ãŒã·ã§ã³ãå®è¡ããã«ã¯ããµã³ãã«ã¢ããªã±ãŒã·ã§ã³ãããã±ãŒãžåããå¿
èŠããããŸã- О ããŒããžã§ã - ã§
ã¢ããªã±ãŒã·ã§ã³ãã³ã³ããã«ããã±ãŒãžåããã«ã¯ã次ã®ãã®ãå¿
èŠã§ãã ããã«ãŒãã¡ã€ã«. ããã«ãŒãã¡ã€ã« ã¢ããªã±ãŒã·ã§ã³ã®ãœãŒã¹ ã³ãŒããšãã®äŸåé¢ä¿ããã«ãããããã®ã³ãã³ããå®çŸ©ããããã¹ã ãã¡ã€ã«ã§ãã
äŸã«ã¯ãã§ã«ãããŸã ããã«ãŒãã¡ã€ã« ã®ãã㫠О ããŒããžã§ã ã€ã¡ãŒãžãåéããããã«å¿ èŠãªãã¹ãŠã®ã³ãã³ããå«ãŸããŠããŸãã äžã« - ããã«ãŒãã¡ã€ã« ã®ããã« :
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
ã³ã³ããåãµãŒããŒ
-
ãµã³ãã«ã眮ãããŠãããã£ã¬ã¯ããªã«ç§»åããŸã :
cd YOUR_WORKING_DIRECTORY/istio-samples/sample-apps/helloserver/server/
-
ã䜿çšããŠç»åãçµã¿ç«ãŠãŸã ããã«ãŒãã¡ã€ã« åã«å®çŸ©ããç°å¢å€æ°:
docker build -t gcr.io/$PROJECT_ID/$GCR_REPO/helloserver:v0.0.1 .
ãã©ã¡ãŒã¿ãŒ -t Dockerã¿ã°ãè¡šããŸãã ããã¯ãã³ã³ãããŒããããã€ãããšãã«äœ¿çšããã€ã¡ãŒãžã®ååã§ãã
- ã€ã¡ãŒãžãã³ã³ãã ã¬ãžã¹ããªã«ã¢ããããŒãããŸãã
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 ä»®æ³ãã·ã³ãŸãã¯ã³ã³ãã¥ãŒã¿äžã§å®è¡ã§ããŸãã ããã«ãŒã©ã³ã ããããå®çšŒåç°å¢ã§ã¯ãã³ã³ãããäžå çã«èª¿æŽããæ¹æ³ãå¿ èŠã§ãã ããšãã°ãã³ã³ãããŒãåžžã«å®è¡ãããŠããããšã確èªããã·ã¹ãã ãå¿ èŠã§ããããã©ãã£ãã¯ãå¢å ããå Žåã«è¿œå ã®ã³ã³ãã㌠ã€ã³ã¹ã¿ã³ã¹ãã¹ã±ãŒã«ã¢ããããŠã¹ãã³ã¢ããããæ¹æ³ãå¿ èŠã§ãã
ã³ã³ããåãããã¢ããªã±ãŒã·ã§ã³ãå®è¡ããã«ã¯ã次ã䜿çšã§ããŸã
GKE ã¯ã©ã¹ã¿ã®äœæ:
1) ã¯ã©ã¹ã¿ãŒãäœæããŸãã
gcloud container clusters create istioready
--cluster-version latest
--machine-type=n1-standard-2
--num-nodes 4
ããŒã gã¯ã©ãŠã GCP ãããžã§ã¯ããšæå®ããããã©ã«ã ãŸãŒã³ã« istioready ã¯ã©ã¹ã¿ãŒãäœæããŸãã Istio ãå®è¡ããã«ã¯ãå°ãªããšã 4 ã€ã®ããŒããšä»®æ³ãã·ã³ãçšæããããšããå§ãããŸãã
ããŒã ã¯æ°åã§ã¯ã©ã¹ã¿ãŒãäœæããŸãã ã¯ã©ã¹ã¿ãŒã®æºåãå®äºãããšãã³ãã³ãã¯æ¬¡ã®ããã«åºåããŸãã
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 ã§ã¯ãã³ã³ããã¯ãããå
ã§å®è¡ãããŸãã 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 ã®äœ¿çšæ³
ãããã§ã¹ããŸãã¯ãã¡ã€ã«ã§æãŸããç¶æ
ãæå®ããŸãã
ãã®äŸã«ã¯ã次㮠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 ãããã·éã®æ¥ç¶ã¯ãµãŒãã¹ ã¡ãã·ã¥ã圢æããŸãã ãµãŒãã¹ ã¡ãã·ã¥ ã¢ãŒããã¯ãã£ã¯ãKubernetes ã®äžã«å¶åŸ¡ã¬ã€ã€ãŒãæäŸããŸãã
Envoy ãããã·ã¯ç¬èªã®ã³ã³ããå ã§å®è¡ããããããã¢ããªã±ãŒã·ã§ã³ ã³ãŒããã»ãšãã©å€æŽããã« Istio ã GKE ã¯ã©ã¹ã¿äžã«ã€ã³ã¹ããŒã«ã§ããŸãã ãã ããã¢ããªã±ãŒã·ã§ã³ã Istio ã§ç®¡çã§ããããã«ããããã«ãããã€ãã®äœæ¥ãè¡ããŸããã
- ãã¹ãŠã®ã³ã³ããã«å¯ŸãããµãŒãã¹ã å°å ¥ãž О ããŒããžã§ã Kubernetes ãµãŒãã¹ã«é¢é£ä»ããããŠããŸãã å¹³ ããŒããžã§ããåä¿¡ãªã¯ãšã¹ããåä¿¡ããªããµãŒãã¹ããããŸãã
- ãµãŒãã¹å
ã®ããŒãã«ã¯ååãå¿
èŠã§ãã GKE ã§ã¯ãµãŒãã¹ ããŒãã«ååãä»ããªããŸãŸã«ããããšãã§ããŸãããIstio ã§ã¯ãµãŒãã¹ ããŒããæå®ããå¿
èŠããããŸãã
ããŒãå 圌ã®ãããã³ã«ã«åŸã£ãŠã YAML ãã¡ã€ã«å ã®ããŒã ãšåŒã°ãã HTTPãµãŒããŒããããã³ã«ã䜿çšããŠãããã HTTPã ãã ãµãŒã㹠䜿çšããã gRPCãããŒãã«ååãä»ããŸã GRPC. - ãããã€ã¡ã³ãã«ã¯ãã©ã°ãä»ããããŸãã ãããã£ãŠãåããµãŒãã¹ã®ããŒãžã§ã³éã§ãã©ãã£ãã¯ãåå²ãããªã©ãIstio ã®ãã©ãã£ãã¯ç®¡çæ©èœã䜿çšã§ããŸãã
Istio ã®ã€ã³ã¹ããŒã«
Istio ãã€ã³ã¹ããŒã«ããã«ã¯ XNUMX ã€ã®æ¹æ³ããããŸãã ã§ãã
ãªãã·ã§ã³ãéžæããé©åãªã¬ã€ãã確èªããæ瀺ã«åŸã£ãŠã¯ã©ã¹ã¿ãŒã« Istio ãã€ã³ã¹ããŒã«ããŸãã æ°ãããããã€ããã¢ããªã±ãŒã·ã§ã³ã§ Istio ã䜿çšããå Žåã¯ã
ã¯ãªãŒãã³ã°
ãã®ãã¥ãŒããªã¢ã«ã§äœ¿çšãããªãœãŒã¹ã Google Cloud Platform ã¢ã«ãŠã³ãã«è«æ±ãããªãããã«ããã«ã¯ãIstio ãã€ã³ã¹ããŒã«ããŠãµã³ãã« ã¢ããªã±ãŒã·ã§ã³ãè©ŠããåŸãã³ã³ãã ã¯ã©ã¹ã¿ãŒãåé€ããŠãã ããã ããã«ãããã³ã³ãã¥ãŒãã£ã³ã° ã€ã³ã¹ã¿ã³ã¹ããã£ã¹ã¯ããããã¯ãŒã¯ ãªãœãŒã¹ãªã©ã®ãã¹ãŠã®ã¯ã©ã¹ã¿ãŒ ãªãœãŒã¹ãåé€ãããŸãã
次ã¯äœã§ããïŒ
-
次ã®ãã¯ãããžãŒãæ€èšããŠãã ããã
ããã«ãŒ ã³ã³ãã ã³ã³ããã¬ãžã¹ã㪠Kubernetes G.K.E. ãµãŒãã¹ ã¡ãã·ã¥ ã€ã¹ãã£ãª
-
次ã®ããŒã«ã調ã¹ãŠãã ããã
-
Kubernetes ã®æŠå¿µãåŠã³ãŸãã
åºæïŒ habr.com