はじめに
今回は、サービスメッシュを提供する Istio
の構築をHTTP Proxy環境で行ってみました。
CentOS8 + minikubeでは上手くいかなかったのでUbuntu18.04 + minikubeにしています。
.curlrcを編集することで多少コマンドを短くできますがあえて編集せずに進めています。
2/10週に加筆予定。
環境概要
- OS
- Ubuntu 18.04.4 LTS
- kubernetes
- v1.17.2
- minikube
- v1.7.1
- crictl
- 1.17.0
- docker
- 18.09.7
- Istio
- v1.3.7
仮想マシンの構築
VirtualBox上に仮想マシンを作成
- vCPU 4コア ※2コア以上必須 (minikube仕様)
- メモリ 24GB ※16GBあれば大丈夫だと思う
- HDD 160GB (可変)
- ネットワーク
- アダプター 1: Intel PRO/1000 MT Desktop (NAT)
- アダプター 2: Intel PRO/1000 MT Desktop (ホストオンリーアダプタ)
仮想マシン上にUbuntu18.04をインストール
- HTTP Proxyの設定を行う
- OpenSSH Serverパッケージを導入する
パッケージのインストール
$ sudo -i
# apt update
# apt upgrade
# apt dist-upgrade
# apt install -y docker.io
# export Proxy=http://<HTTP Proxy Host>:<PORT>/
# curl -x $Proxy -Lo kubectl https://storage.googleapis.com/kubernetes-release/release/$(curl -s -x $Proxy https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl && chmod +x kubectl && cp kubectl /usr/local/bin/ && rm kubectl
# curl -x $Proxy -Lo minikube https://github.com/kubernetes/minikube/releases/download/v1.7.1/minikube-linux-amd64 && chmod +x minikube* && sudo cp minikube /usr/local/bin/ && rm minikube
# curl -OL -x $Proxy https://github.com/kubernetes-sigs/cri-tools/releases/download/v1.17.0/crictl-v1.17.0-linux-amd64.tar.gz | tar zxv /usr/local/bin
minikube構築
# cd /etc/systemd/system/
# mkdir docker.service.d
# vi docker.service.d/http-proxy.conf
[Service]
Environment="HTTP_PROXY=<HTTP Proxy Host>:<PORT>" "HTTPS_PROXY=<HTTP Proxy Host>:<PORT>"
# systemctl daemon-reload
# systemctl show --property=Environment docker
# systemctl restart docker
# cd ~
# export HTTP_PROXY=$Proxy
# HTTPS_PROXYの設定値のURIスキーマはhttps://ではなくhttp://にすること
# export HTTPS_PROXY=$Proxy
# export NO_PROXY=localhost,127.0.0.1,10.96.0.0/12,192.168.99.0/24,192.168.39.0/24,10.0.2.15
# minikube start --vm-driver=none --kubernetes-version=v1.17.2 --docker-env HTTP_PROXY=$HTTP_PROXY --docker-env HTTPS_PROXY=$HTTPS_PROXY --docker-env NO_PROXY=$NO_PROXY
Istio構築
# curl -x http://$Proxy -L https://git.io/getLatestIstio | ISTIO_VERSION=1.3.7 sh -
# cd istio-1.3.7/
# for i in install/kubernetes/helm/istio-init/files/crd*yaml; do kubectl apply -f $i; done
# kubectl apply -f install/kubernetes/istio-demo.yaml
# ※istio-ingressgateway のexternal-ipはpendingのままになる。
# kubectl get svc -n istio-system
# kubectl get pods -n istio-system
サンプルアプリケーションのデプロイ
# kubectl label namespace default istio-injection=enabled
# kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
# kubectl get svc
# kubectl get pods
# kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml
# kubectl create -f samples/bookinfo/networking/destination-rule-all-mtls.yaml
# export GATEWAY_URL=$(minikube ip):$(kubectl get svc istio-ingressgateway -n istio-system -o 'jsonpath={.spec.ports[1].nodePort}')
# echo $GATEWAY_URL
10.0.2.15:31380
# lsof -i:31380
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
kube-prox 3038 root 18u IPv6 329642 0t0 TCP *:31380 (LISTEN)
Webブラウザから以下にアクセスしてみる
VirtualBoxが動作しているホストマシンのWebブラウザで「http://<仮想マシンのIPアドレス>:<ポート>/productpage」にアクセス。
注意点)
- <仮想マシンのIPアドレス>は10.0.2.15 (NAT用のvNIC) のIPアドレスではなく192.168.225.4のような (ホストオンリーネットワーク用のvNIC)のIPアドレス
- lsofの結果を見ればわかるが* (0.0.0.0) で待ち受けている
- <ポート>は31380とは限らないのでecho $GATEWAY_URLの値を確認すること
- ホストマシンのWebブラウザの設定でHTTP Proxyを外すか、NoProxyの設定 (イメージ: 192.168.225.0/24を除外) を行う必要がある。