サンプルアプリ
題材: BookInfo アプリケーション
※ 事前にIstioをKubernetesにデプロイしておいてください.
構成
サンプルアプリのデプロイ
istio-1.0.6 directory
kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
bookinfo.yaml
取り敢えず,一部分を抽出してみました.
普段ならtargetPortを指定していますが,サイドカーインジェクションのため,指定しなくても大丈夫と言うことなのでしょうか.
それ以外は差し当たっていつも通りのyamlかなと思いました.それでは次に行きましょう!
##################################################################################################
# Details service
##################################################################################################
apiVersion: v1
kind: Service
metadata:
name: details
labels:
app: details
spec:
ports:
- port: 9080
name: http
selector:
app: details
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: details-v1
spec:
replicas: 1
template:
metadata:
labels:
app: details
version: v1
spec:
containers:
- name: details
image: istio/examples-bookinfo-details-v1:1.8.0
imagePullPolicy: IfNotPresent
ports:
- containerPort: 9080
Ingress Envoy(Gatewayのデプロイ)
# ingressのデプロイ
kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml
bookinfo-gateway.yaml
いきなりapiVersionに注目ですね.
networking.istio.io/v1alpha3が使われています.
Istioによる拡張APIでしょうか.
GatewayとVirtual Serviceどちらも初めて聞きました.
筆者はGatewayに対するDeploymentとConfigMapがこの二つかなと解釈しました.
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: bookinfo-gateway
spec:
selector:
istio: ingressgateway # use istio default controller
servers:
- port:
number: 80
name: http
protocol: HTTP
hosts:
- "*"
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: bookinfo
spec:
hosts:
- "*"
gateways:
- bookinfo-gateway
http: # /api/v1/products/ + /productpage or /login or /logout だとリクエストを,productpageに流すみたいですね.
- match:
- uri:
exact: /productpage
- uri:
exact: /login
- uri:
exact: /logout
- uri:
prefix: /api/v1/products
route:
- destination:
host: productpage
port:
number: 9080
まとめ
istioに利用するにあたって増えたAPIを理解する必要がありそうです.
次は,カナリアリリースのドキュメントでも見ていきましょう.