5.2 部署官方示例-bookinfo

Bookinfo 应用分为四个单独的微服务:

  • productpage: 这个微服务会调用 detailsreviews 两个微服务,用来生成页面。
  • 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仪表板、 以及PrometheusGrafana、还有Jaeger

安装kiali等插件

该命令会安装一系列的crd资源,并且安装grafanaprometheusjaegerkiali组件

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。

kiali-components

kiali-dashboard

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-
Copyright © huangzhongde.cn 2021 all right reserved,powered by Gitbook该文件修订时间: 2022-01-28 00:02:24

results matching ""

    No results matching ""