这些文章假定您是Istio的新手,它提供了简化的说明来安装Istio的内置演示配置文件。通过此安装,您可以快速开始评估Istio。如果您已经熟悉Istio或对安装其他配置配置文件或更高级的部署模型感兴趣,请按照istioctl
的说明进行安装。
演示配置文件不适用于性能评估和生产。它旨在通过高级别的跟踪和访问日志来展示Istio功能。
安装Istio
$ istioctl install --set profile=demo -y
✔ Istio core installed
✔ Istiod installed
✔ Egress gateways installed
✔ Ingress gateways installed
✔ Installation complete
确保已部署以下Kubernetes服务来验证安装,并确认它们都分配相应的CLUSTER-IP(除了jaeger-agent服务之外):
$ kubectl get svc -n istio-system
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
istio-egressgateway ClusterIP 10.111.80.92 <none> 80/TCP,443/TCP,15443/TCP 4m9s
istio-ingressgateway LoadBalancer 10.106.30.102 <pending> 15021:31864/TCP,80:31372/TCP,443:30823/TCP,31400:30381/TCP,15443:31243/TCP 4m9s
istiod ClusterIP 10.103.249.105 <none> 15010/TCP,15012/TCP,443/TCP,15014/TCP 4m31s
如果您的集群在不支持外部负载均衡器(例如minikube)的环境中运行,则istio-ingressgateway
的 EXTERNAL-IP
将显示<pending>
。 要访问网关,请使用服务的NodePort或使用端口转发。
还要确保已部署相应的Kubernetes Pod
的运行状态:
$ kubectl get pod -n istio-system
NAME READY STATUS RESTARTS AGE
istio-egressgateway-8dff9c778-q99w6 1/1 Running 0 5m55s
istio-ingressgateway-6cfd75fc57-g4knr 1/1 Running 0 5m55s
istiod-7f6d7c759-9xqh8 1/1 Running 0 6m17s
部署一个例子
-
$ 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 sidecar也将随之部署。
$ 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
重新运行上一个命令,并等待所有Pod
READY 2/2
和STATUS Running
,然后再继续下一步。 这可能需要几分钟,具体取决于您的平台。验证到目前为止一切正常。通过检查响应中的页面标题,运行以下命令以查看应用程序是否正在集群中运行并返回HTML页面:
$ kubectl exec "$(kubectl get pod -l app=ratings -o jsonpath='{.items[0].metadata.name}')" -c ratings -- curl -s productpage:9080/productpage | grep -o "<title>.*</title>" <title>Simple Bookstore App</title>
将应用程序开放至外部流量
Bookinfo已部署,但无法从外部访问。为了使其可访问,您需要创建一个Istio Ingress网关,该网关将路径映射到网格边缘处的路线。
将此应用程序与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
变量:
设置入口的端口:
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}')
确保已将端口成功分配给每个环境变量:
$ echo "$INGRESS_PORT"
32194
$ echo "$SECURE_INGRESS_PORT"
31632
设置入口IP:
export INGRESS_HOST=$(kubectl get po -l istio=ingressgateway -n istio-system -o jsonpath='{.items[0].status.hostIP}')
如果设置了EXTERNAL-IP
值,则您的环境具有可用于入口网关的外部负载平衡器。如果EXTERNAL-IP
值为<none>
(或永久为<pending>
),则您的环境不会为入口网关提供外部负载平衡器。在这种情况下,您可以使用node port
访问网关。
1、设置GATEWAY_URL
:
$ export GATEWAY_URL=$INGRESS_HOST:$INGRESS_PORT
2、确保已成功将IP地址和端口分配给环境变量:
$ echo "$GATEWAY_URL"
192.168.99.100:32194
验证外部访问
通过使用浏览器查看Bookinfo产品页面,确认可以从外部访问Bookinfo应用程序。
运行以下命令以获取Bookinfo应用程序的外部地址。
$ echo "http://$GATEWAY_URL/productpage"
将前一个命令的输出粘贴到Web浏览器中,并确认已显示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
在左侧导航菜单中,选择图形,然后在命名空间下拉列表中,选择默认值。
Kiali仪表板显示了网格的概述以及Bookinfo示例应用程序中服务之间的关系。 它还提供了过滤器以可视化交通流。
接下来
恭喜您完成评估版安装!
以下的步骤来是理解Istio功能不错的起点:
下一步是自定义Istio并部署您自己的应用程序,请参考以下资源: