入门
本指南帮您快速评估 Istio。 如果您已经熟悉 Istio,或对安装其他配置类型或高级部署模型感兴趣, 请参阅我们应该采用哪种 Istio 安装方法? 的 FAQ 页面。
完成下面步骤需要您有一个 cluster, 且运行着兼容版本的 Kubernetes (1.24, 1.25, 1.26, 1.27)。 您可以使用任何支持的平台,例如: Minikube 或特定平台安装说明章节中指定的其他平台。
请按照以下步骤开始使用 Istio:
下载 Istio
转到 Istio 发布 页面,下载针对您操作系统的安装文件, 或用自动化工具下载并提取最新版本(Linux 或 macOS):
$ curl -L https://istio.io/downloadIstio | sh -
转到 Istio 包目录。例如,如果包是
istio-1.18.2
:$ cd istio-1.18.2
安装目录包含:
samples/
目录下的示例应用程序bin/
目录下的istioctl
客户端二进制文件。
将
istioctl
客户端添加到路径(Linux 或 macOS):$ export PATH=$PWD/bin:$PATH
安装 Istio
对于本次安装,我们采用
demo
配置组合。 选择它是因为它包含了一组专为测试准备的功能集合,另外还有用于生产或性能测试的配置组合。$ istioctl install --set profile=demo -y ✔ Istio core installed ✔ Istiod installed ✔ Egress gateways installed ✔ Ingress gateways installed ✔ Installation complete
给命名空间添加标签,指示 Istio 在部署应用的时候,自动注入 Envoy 边车代理:
$ kubectl label namespace default istio-injection=enabled namespace/default labeled
部署示例应用
部署
Bookinfo
示例应用:$ 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
应用很快会启动起来。当每个 Pod 准备就绪时,Istio 边车将伴随应用一起部署。
$ kubectl get services NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE details ClusterIP 10.0.0.212 <none> 9080/TCP 29s kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 25m productpage ClusterIP 10.0.0.57 <none> 9080/TCP 28s ratings ClusterIP 10.0.0.33 <none> 9080/TCP 29s reviews ClusterIP 10.0.0.28 <none> 9080/TCP 29s
和
$ kubectl get pods NAME READY STATUS RESTARTS AGE details-v1-558b8b4b76-2llld 2/2 Running 0 2m41s productpage-v1-6987489c74-lpkgl 2/2 Running 0 2m40s ratings-v1-7dc98c7588-vzftc 2/2 Running 0 2m41s reviews-v1-7f99cc4496-gdxfn 2/2 Running 0 2m41s reviews-v2-7d79d5bd5d-8zzqd 2/2 Running 0 2m41s reviews-v3-7dbcdcbc56-m8dph 2/2 Running 0 2m41s
确认上面的操作都正确之后,运行下面命令,通过检查返回的页面标题来验证应用是否已在集群中运行,并已提供网页服务:
$ kubectl exec "$(kubectl get pod -l app=ratings -o jsonpath='{.items[0].metadata.name}')" -c ratings -- curl -sS productpage:9080/productpage | grep -o "<title>.*</title>" <title>Simple Bookstore App</title>
对外开放应用程序
此时,BookInfo 应用已经部署,但还不能被外界访问。 要开放访问,您需要创建 Istio 入站网关(Ingress Gateway), 它会在网格边缘把一个路径映射到路由。
把应用关联到 Istio 网关:
$ kubectl apply -f @samples/bookinfo/networking/bookinfo-gateway.yaml@ gateway.networking.istio.io/bookinfo-gateway created virtualservice.networking.istio.io/bookinfo created
确保配置文件没有问题:
$ istioctl analyze ✔ No validation issues found when analyzing namespace: default.
确定入站 IP 和端口
按照说明,为访问网关设置两个变量:INGRESS_HOST
和 INGRESS_PORT
。
使用标签页,切换到您选用平台的说明:
在新的终端窗口中运行此命令以启动一个 Minikube 隧道,将流量发送到 Istio Ingress Gateway。
这将为 service/istio-ingressgateway
提供一个外部负载均衡器 EXTERNAL-IP
。
$ minikube tunnel
设置入站主机和端口:
$ 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}')
确保 IP 地址和端口被成功地赋值给了每一个环境变量:
$ echo "$INGRESS_HOST"
127.0.0.1
$ echo "$INGRESS_PORT"
80
$ echo "$SECURE_INGRESS_PORT"
443
执行下面命令以判断您的 Kubernetes 集群环境是否支持外部负载均衡:
$ kubectl get svc istio-ingressgateway -n istio-system
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
istio-ingressgateway LoadBalancer 172.21.109.129 130.211.10.121 80:31380/TCP,443:31390/TCP,31400:31400/TCP 17h
设置 EXTERNAL-IP
的值之后,
您的环境就有了一个外部的负载均衡器,可以将其用作入站网关。
但如果 EXTERNAL-IP
的值为 <none>
(或者一直是 <pending>
状态),
则您的环境则没有提供可作为入站流量网关的外部负载均衡器。
在这个情况下,您还可以用服务(Service)的节点端口访问网关。
依据您的环境,选择相应的说明:
如果您确定您的环境中确实存在外部的负载均衡,请参照下面的说明。
设置入站 IP 地址和端口:
$ 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}')
按照下面说明:如果您的环境中没有外部负载均衡器,那就选择一个节点端口来代替。
设置入站的端口:
$ 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}')
GKE:
$ export INGRESS_HOST=worker-node-address
您需要创建防火墙规则,以允许 TCP 流量发送到 ingressgateway
服务地端口。
运行下面的命令,以允许 HTTP 端口或 HTTPS 端口的流量,或两者的流量都允许。
$ gcloud compute firewall-rules create allow-gateway-http --allow "tcp:$INGRESS_PORT"
$ gcloud compute firewall-rules create allow-gateway-https --allow "tcp:$SECURE_INGRESS_PORT"
IBM Cloud Kubernetes Service:
$ ibmcloud ks workers --cluster cluster-name-or-id
$ export INGRESS_HOST=public-IP-of-one-of-the-worker-nodes
Docker For Desktop:
$ export INGRESS_HOST=127.0.0.1
其他环境:
$ export INGRESS_HOST=$(kubectl get po -l istio=ingressgateway -n istio-system -o jsonpath='{.items[0].status.hostIP}')
设置环境变量
GATEWAY_URL
:$ export GATEWAY_URL=$INGRESS_HOST:$INGRESS_PORT
确保 IP 地址和端口均成功地赋值给了环境变量:
$ echo "$GATEWAY_URL" 192.168.99.100:32194
验证外部访问
用浏览器查看 Bookinfo 应用的产品页面,验证 Bookinfo 已经实现了外部访问。
运行下面命令,获取 Bookinfo 应用的外部访问地址。
$ echo "http://$GATEWAY_URL/productpage"
把上面命令的输出地址复制粘贴到浏览器并访问,确认 Bookinfo 应用的产品页面是否可以打开。
查看仪表板
Istio 和几个遥测应用做了集成。 遥测能帮您了解服务网格的结构、展示网络的拓扑结构、分析网格的健康状态。
使用下面说明部署 Kiali 仪表板、 以及 Prometheus、 Grafana、 还有 Jaeger。
安装 Kiali 和其他插件,等待部署完成。
$ kubectl apply -f samples/addons $ kubectl rollout status deployment/kiali -n istio-system Waiting for deployment "kiali" rollout to finish: 0 of 1 updated replicas are available... deployment "kiali" successfully rolled out
访问 Kiali 仪表板。
$ istioctl dashboard kiali
在左侧的导航菜单,选择 Graph ,然后在 Namespace 下拉列表中,选择 default 。
Kiali 仪表板展示了网格的概览以及
Bookinfo
示例应用的各个服务之间的关系。 它还提供过滤器来可视化流量的流动。
后续步骤
恭喜您完成了评估安装!
对于新手来说,这些任务是非常好的资源,可以借助 demo
安装更深入评估 Istio 的特性:
在您为了生产系统定制 Istio 之前,参阅这些资源:
加入 Istio 社区
我们欢迎您加入 Istio 社区, 提出问题,并给我们以反馈。
卸载
删除 Bookinfo
示例应用和配置, 参阅清理 Bookinfo
。
Istio 卸载程序按照层次结构逐级的从 istio-system
命令空间中删除 RBAC 权限和所有资源。对于不存在的资源报错,可以安全的忽略掉,毕竟它们已经被分层地删除了。
$ kubectl delete -f @samples/addons@
$ istioctl uninstall -y --purge
命名空间 istio-system
默认情况下并不会被移除。
不需要的时候,使用下面命令移除它:
$ kubectl delete namespace istio-system
指示 Istio 自动注入 Envoy 边车代理的标签默认也不移除。 不需要的时候,使用下面命令移除它。
$ kubectl label namespace default istio-injection-