在部署Bookinfo前应该确保istio已经安装完成。
2、将default namespace打上边车自动注入的标记
kubectl label namespace default istio-injection=enabled
3、部署应用Bookinfo。
kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
4、确保所有POD和服务运行正常
执行完前一步的命令后确保如下图中的POD都是running
5、验证Bookinfo应用运行正常。
执行如下命令后应该会返回
kubectl exec -it $(kubectl get pod -l app=ratings -o jsonpath='{.items[0].metadata.name}') -c ratings -- curl productpage:9080/productpage | grep -o "
前面已经部署了Bookinfo应用,若要从k8s集群外部(如从浏览器)访问其服务,可用Istio网关实现。
1、为应用定义ingress gateway:
kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml
2、确认gateway已经成功创建:
kubectl get gateway
1) 执行以下命令kubectl get svc istio-ingressgateway -n istio-system 查看istio-ingressgateway服务的外部IP
若服务类型为load balancer则EXTERNAL-IP会产生一个IP,但若服务类型是nodeport,则为none,本人的服务是nodeport的,故如上所示为EXTERNAL-IP为none。
2)若服务使用外部load balancer确定ingress ip 和port的方法如下(可选,本人的系统是nodeport的这一段不用)
export INGRESS_HOST=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].port}')
export SECURE_INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="https")].port}')
3)若服务使用nodeport的情况,则采用如下的命令确定port和ingress ip
export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].nodePort}')
export SECURE_INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="https")].nodePort}')
采用如下的命令获取并设置ingress ip:
export INGRESS_HOST=$(kubectl get po -l istio=ingressgateway -n istio-system -o jsonpath='{.items[0].status.hostIP}')
4)设置GATEWAY_URL
export GATEWAY_URL=$INGRESS_HOST:$INGRESS_PORT
5)确认从集群外部访问Bookinfo应用服务
curl -s http://${GATEWAY_URL}/productpage | grep -o "
应该返回
也可以用web浏览器访问进行验证,如下图
多刷新几次页面中评价的五星会显示不同颜色,原因是轮流调度到后台多个版本中的一个的。
若以后要istio去控制Bookinfo的版本路由,需要创建以下的destination rules。
1)如果没有激活双向TLS,执行如下的命令:
kubectl apply -f samples/bookinfo/networking/destination-rule-all.yaml
2)如果已经激活双向TLS,执行如下的命令:
kubectl apply -f samples/bookinfo/networking/destination-rule-all-mtls.yaml
然后可以采用如下的命令查询创建结果:
kubectl get destinationrules -o yaml
通过以上步骤已经成功创建Bookinfo应用示例,后续可以在该示例上做istio有关流量路由、错误注入、速率限制等实验。