istio 安装和 bookinfo 示例

本贴最后更新于 1776 天前,其中的信息可能已经水流花落

istio

istio 从 1.5 版本开始回归单体架构,下面记录 1.6.1 版本安装测试。kubernetes 版本为 1.18

1.安装

安装请参考官网,安装包下载可以 github 上获取,如果能联网,也可以使用下面命令获取

$ curl -L https://istio.io/downloadIstio | sh -

切换到 Istio 包所在目录下。例如:Istio 包名为 istio-1.6.1,则:

$ cd istio-1.6.1

然后将 istioctl 放到系统路径下

$ mv ./bin/istioctl /usr/local/bin

接着就可以安装了

istioctl manifest apply --set profile=demo

验证是否安装成功

$ kubectl get svc -n istio-system NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE grafana ClusterIP 172.21.211.123 <none> 3000/TCP 2m istio-citadel ClusterIP 172.21.177.222 <none> 8060/TCP,15014/TCP 2m istio-egressgateway ClusterIP 172.21.113.24 <none> 80/TCP,443/TCP,15443/TCP 2m istio-galley ClusterIP 172.21.132.247 <none> 443/TCP,15014/TCP,9901/TCP 2m istio-ingressgateway LoadBalancer 172.21.144.254 52.116.22.242 15020:31831/TCP,80:31380/TCP,443:31390/TCP,31400:31400/TCP,15029:30318/TCP,15030:32645/TCP,15031:31933/TCP,15032:31188/TCP,15443:30838/TCP 2m istio-pilot ClusterIP 172.21.105.205 <none> 15010/TCP,15011/TCP,8080/TCP,15014/TCP 2m istio-policy ClusterIP 172.21.14.236 <none> 9091/TCP,15004/TCP,15014/TCP 2m istio-sidecar-injector ClusterIP 172.21.155.47 <none> 443/TCP,15014/TCP 2m istio-telemetry ClusterIP 172.21.196.79 <none> 9091/TCP,15004/TCP,15014/TCP,42422/TCP 2m jaeger-agent ClusterIP None <none> 5775/UDP,6831/UDP,6832/UDP 2m jaeger-collector ClusterIP 172.21.135.51 <none> 14267/TCP,14268/TCP 2m jaeger-query ClusterIP 172.21.26.187 <none> 16686/TCP 2m kiali ClusterIP 172.21.155.201 <none> 20001/TCP 2m prometheus ClusterIP 172.21.63.159 <none> 9090/TCP 2m tracing ClusterIP 172.21.2.245 <none> 80/TCP 2m zipkin ClusterIP 172.21.182.245 <none> 9411/TCP

如果集群运行在一个不支持外部负载均衡器的环境中(例如:minikube),istio-ingressgatewayEXTERNAL-IP 将显示为 <pending> 状态。请使用服务的 NodePort 或 端口转发来访问网关。

$ kubectl edit svc istio-ingressgateway -n istio-system ... spec ... type: NodePort

请确保关联的 Kubernetes pod 已经部署,并且 STATUSRunning

$ kubectl get pods -n istio-system NAME READY STATUS RESTARTS AGE grafana-f8467cc6-rbjlg 1/1 Running 0 1m istio-citadel-78df5b548f-g5cpw 1/1 Running 0 1m istio-egressgateway-78569df5c4-zwtb5 1/1 Running 0 1m istio-galley-74d5f764fc-q7nrk 1/1 Running 0 1m istio-ingressgateway-7ddcfd665c-dmtqz 1/1 Running 0 1m istio-pilot-f479bbf5c-qwr28 1/1 Running 0 1m istio-policy-6fccc5c868-xhblv 1/1 Running 2 1m istio-sidecar-injector-78499d85b8-x44m6 1/1 Running 0 1m istio-telemetry-78b96c6cb6-ldm9q 1/1 Running 2 1m istio-tracing-69b5f778b7-s2zvw 1/1 Running 0 1m kiali-99f7467dc-6rvwp 1/1 Running 0 1m prometheus-67cdb66cbb-9w2hm 1/1 Running 0 1m

2.Profile 配置

不同 Profile,安装的组件不同,上面是为了测试,指定了 demo 配置,具体不同版本请查看官网,下面贴一下:

下表中标记为 X 的组件就是包含在配置文件里的内容:

image20200611172513484.png

为了进一步自定义 Istio 和安装插件,您可以在安装 Istio 时所使用的 istioctl manifest 命令中添加一个或多个 --set <key>=<value> 选项。 安装选项中列出了完整的当前所支持的安装键值对集合。

2.bookinfo 示例

官网链接为 https://istio.io/latest/zh/docs/examples/bookinfo/

1.进入 Istio 安装目录。

2.Istio 默认自动注入 Sidecar. 请为 default 命名空间打上标签 istio-injection=enabled

$ kubectl label namespace default istio-injection=enabled

3.使用 kubectl 部署应用:

$ kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml

4.确认所有的服务和 Pod 都已经正确的定义和启动:

$ kubectl get services NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE details 10.0.0.31 <none> 9080/TCP 6m kubernetes 10.0.0.1 <none> 443/TCP 7d productpage 10.0.0.120 <none> 9080/TCP 6m ratings 10.0.0.15 <none> 9080/TCP 6m reviews 10.0.0.170 <none> 9080/TCP 6m

$ kubectl get pods NAME READY STATUS RESTARTS AGE details-v1-1520924117-48z17 2/2 Running 0 6m productpage-v1-560495357-jk1lz 2/2 Running 0 6m ratings-v1-734492171-rnr5l 2/2 Running 0 6m reviews-v1-874083890-f0qf0 2/2 Running 0 6m reviews-v2-1343845940-b34q5 2/2 Running 0 6m reviews-v3-1813607990-8ch52 2/2 Running 0 6m

5.要确认 Bookinfo 应用是否正在运行,请在某个 Pod 中用 curl 命令对应用发送请求,例如 ratings

$ 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>

6.为应用程序定义 Ingress 网关:

$ kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml

7.确认网关创建完成:

$ kubectl get gateway NAME AGE bookinfo-gateway 32s

8.通过 istio 网关访问应用

浏览器访问 http://$GATEWAY_URL/productpage,可以多刷新几次,会有不同的效果。

$GATEWAY_URL=节点 ip+nodeport 端口

nodeport 为 istio-ingressgateway 的 svc 的 http2 指定的端口,通过

$ kubectl get svc istio-ingressgateway -n istio-system -oyaml ... - name: http2 nodePort: 31624 port: 80 protocol: TCP ...

8.验证规则

$ kubectl apply -f samples/bookinfo/networking/destination-rule-all.yaml

9.查看规则

kubectl get destinationrules -o yaml

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...