5.2 部署官方示例-bookinfo
Bookinfo 应用分为四个单独的微服务:
productpage
: 这个微服务会调用details
和reviews
两个微服务,用来生成页面。details
: 这个微服务中包含了书籍的信息。reviews
: 这个微服务中包含了书籍相关的评论。它还会调用ratings
微服务。ratings
: 这个微服务中包含了由书籍评价组成的评级信息。
reviews
微服务有 3 个版本:
- v1 版本不会调用
ratings
服务。 - v2 版本会调用
ratings
服务,并使用 1 到 5 个黑色星形图标来显示评分信息。 - v3 版本会调用
ratings
服务,并使用 1 到 5 个红色星形图标来显示评分信息。
5.2.1 开启自动注入功能
kubectl label namespace default istio-injection=enabled
namespace/default labeled
5.2.2 部署bookinfo
cd /usr/local/istio-${ISTIO_VERSION}
kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
输出如下
service/details created
serviceaccount/bookinfo-details created
deployment.apps/details-v1 created
service/ratings created
serviceaccount/bookinfo-ratings created
deployment.apps/ratings-v1 created
service/reviews created
serviceaccount/bookinfo-reviews created
deployment.apps/reviews-v1 created
deployment.apps/reviews-v2 created
deployment.apps/reviews-v3 created
service/productpage created
serviceaccount/bookinfo-productpage created
deployment.apps/productpage-v1 created
5.2.3 检查部署状态
kubectl get po -l security.istio.io/tlsMode=istio
NAME READY STATUS RESTARTS AGE
details-v1-79f774bdb9-twftn 2/2 Running 0 2m22s
productpage-v1-6b746f74dc-2qx6f 2/2 Running 0 2m21s
ratings-v1-b6994bb9-nsx7s 2/2 Running 0 2m22s
reviews-v1-545db77b95-kzqh2 2/2 Running 0 2m22s
reviews-v2-7bf8c9648f-fwqg9 2/2 Running 0 2m22s
reviews-v3-84779c7bbc-jh78x 2/2 Running 0 2m22s
kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
details ClusterIP 10.97.134.220 <none> 9080/TCP 2m31s
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 147m
productpage ClusterIP 10.103.106.214 <none> 9080/TCP 2m31s
ratings ClusterIP 10.111.114.242 <none> 9080/TCP 2m31s
reviews ClusterIP 10.109.200.65 <none> 9080/TCP 2m31s
pod测试
kubectl exec -it $(kubectl get pod -l app=ratings -o jsonpath='{.items[0].metadata.name}') -c ratings -- curl productpage:9080/productpage | grep -o "<title>.*</title>"
<title>Simple Bookstore App</title>
5.2.4 部署gateway
如果需要对外提供服务,就需要创建gateway
cd /usr/local/istio-${ISTIO_VERSION}
kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml
gateway.networking.istio.io/bookinfo-gateway created
virtualservice.networking.istio.io/bookinfo created
kubectl get virtualservice
NAME GATEWAYS HOSTS AGE
bookinfo [bookinfo-gateway] [*] 5s
5.2.5 获取访问地址
因为使用的是NodePort,host是集群中的任意一台
export INGRESS_HOST=192.168.100.10
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}')
# 设置GATEWAY_URL
export GATEWAY_URL=$INGRESS_HOST:$INGRESS_PORT
echo ${GATEWAY_URL}
192.168.100.10:31197
# 确认可以从集群外部访问
curl -s http://${GATEWAY_URL}/productpage | grep -o "<title>.*</title>"
<title>Simple Bookstore App</title>
5.2.6 查看仪表盘
Istio 和几个遥测应用做了集成。 遥测能帮你了解服务网格的结构、展示网络的拓扑结构、分析网格的健康状态。
使用下面说明部署Kiali
仪表板、 以及Prometheus
、Grafana
、还有Jaeger
。
安装kiali等插件
该命令会安装一系列的crd资源,并且安装grafana
、prometheus
、jaeger
、kiali
组件
kubectl apply -f samples/addons # 需要执行2遍,crd创建先后的问题
kubectl rollout status deployment/kiali -n istio-system
deployment "kiali" successfully rolled out
访问仪表盘
使用下面的命令在本地代理kiali进行访问
istioctl dashboard kiali
也可以将kiali的svc修改为NodePort的形式进行访问
kubectl patch svc -n istio-system kiali -p '{"spec":{"type": "NodePort"}}'
service/kiali patched
kubectl get svc -n istio-system kiali
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kiali NodePort 10.97.112.9 <none> 20001:30792/TCP,9090:31514/TCP 5m13s
通过仪表盘,我们可以看到组件的状态,egressgateway找不到,因为default没有部署 grafana需要修改kiali配置文件
vim samples/addons/kiali.yaml
external_services:
grafana:
url: "http://grafana.istio-system.svc:3000"
in_cluster_url: "http://grafana.istio-system:3000"
kubectl apply -f samples/addons/kiali.yaml
# 修改完configmap需要重启pod
kubectl delete po -n istio-system -l app=kiali
想要体验istio完整功能,建议部署时将profile设置为demo。
5.2.7 卸载
Istio
卸载程序按照层次结构逐级的从istio-system
命令空间中删除RBAC
权限和所有资源。对于不存在的资源报错,可以安全的忽略掉,毕竟他们已经被分层的删除了。
kubectl delete -f samples/addons
istioctl manifest generate --set profile=default | kubectl delete --ignore-not-found=true -f -
命名空间istio-system
默认情况下并不会被删除。不需要的时候,使用下面命令删掉它
kubectl delete namespace istio-system
指示Istio
自动注入Envoy
边车代理的标签默认也不删除。不需要的时候,使用下面命令删掉它。
kubectl label namespace default istio-injection-