Istio用法教程介绍
管理云原生应用程序微服务的一种实用方法是自动化应用程序网络功能。
Istio 是一个可配置的服务网格平台,充当控制平面,将配置分发到 sidecar 代理和网关。它是在 Kubernetes 集群中连接、监控和保护容器的流行选择。
如何使用Istio?在本教程中,你将学习如何安装 Istio、部署测试应用程序以及设置 Kubernetes 集群以使用该平台。
先决条件
- 一个 Kubernetes 集群(或 minikube)
- kubectl 命令行工具
Istio基础入门教程:下载最新的 Istio 版本
要下载最新版本的 Istio,请导航到GitHub 上的Istio 发布页面。
或者,Linux 用户可以使用curl
自动下载和提取最新版本:
curl -L https://istio.io/downloadIstio | sh -
该命令将安装文件解压缩到名为 的文件夹中istio-[version]
:
![Istio基础入门教程:如何使用Istio?](https://www.lsbin.com/wp-content/uploads/2021/11/output-from-curl-l-istio-io-downloadistio-sh.png)
要下载旧版本的 Istio,请使用curl
,但使用以下语法指定版本和处理器架构:
curl -L https://istio.io/downloadIstio | ISTIO_VERSION=1.6.8 TARGET_ARCH=x86_64 sh -
如何使用Istio?Istio 安装指南
1. 启动你的 Kubernetes 集群。本文使用minikube:
minikube start
2. 接下来,移动到包含解压缩文件的文件夹,开始 Istio 安装:
cd istio-1.9.2
3. 该bin/
目录包含istioctl
客户端二进制文件。在 Linux 中,通过键入以下内容将客户端添加到你的路径:
export PATH=$PWD/bin:$PATH
以这种方式设置的变量仅持续到你终止当前的 shell 会话。要永久设置变量,请阅读如何在 Linux 中设置环境变量。
注意:要在 Windows 上执行上述步骤,请手动提取 Istio 安装存档并为 istioctl 二进制文件设置 Windows 环境变量。
4. 使用该istioctl
工具启动安装过程:
istioctl install --set profile=demo -y
输出确认安装成功:
![Istio基础入门教程:如何使用Istio?](https://www.lsbin.com/wp-content/uploads/2021/11/output-from-istioctl-install-set-profile-demo-y.png)
5. Istio 可以在应用程序部署时自动注入 Envoy sidecar 代理。要启用此功能,请使用kubectl
添加包含此指令的命名空间标签:
kubectl label namespace default istio-injection=enabled
![Istio基础入门教程:如何使用Istio?](https://www.lsbin.com/wp-content/uploads/2021/11/output-from-kubectl-label-namespace-default-istio-injection-enabled.png)
Istio 安装过程到此结束。
通过 Bookinfo 应用程序测试部署
Istio基础入门教程:Istio 安装档案包含部署名为Bookinfo的示例应用程序所需的所有文件。
1. 首先bookinfo.yaml
使用kubectl
以下方法应用文件:
kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
系统会创建多个部署、服务和 Pod:
![Istio基础入门教程:如何使用Istio?](https://www.lsbin.com/wp-content/uploads/2021/11/output-from-kubectl-apply-f-samples-bookinfo-platform-kube-bookinfo-yaml.png)
2.检查正在运行的服务:
kubectl get services
![Istio基础入门教程:如何使用Istio?](https://www.lsbin.com/wp-content/uploads/2021/11/output-from-kubectl-get-services.png)
3. 检查 Pod 是否准备就绪:
kubectl get pods
随着 pod 的增加,Istio 会与它们一起部署 sidecar:
![Istio基础入门教程:如何使用Istio?](https://www.lsbin.com/wp-content/uploads/2021/11/1_output-from-kubectl-get-pods.png)
4. 等到READY
每个 pod的标签是2/2
。然后运行以下命令以查看应用程序是否正确提供 HTML 页面:
kubectl exec "$(kubectl get pod -l app=ratings -o jsonpath='{.items[0].metadata.name}')" -c ratings -- curl -sS productpage:9080/productpage | grep -o ""
输出应该是页面的标题标签,以及标题本身:
![Istio基础入门教程:如何使用Istio?](https://www.lsbin.com/wp-content/uploads/2021/11/output-from-kubect-exec-curl-grep-etc.png)
5.下一步是将应用程序开放给外部流量。应用bookinfo-gateway.yaml
文件samples
夹中的文件:
kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml
输出确认应用程序已成功与 Istio 网关关联:
![Istio基础入门教程:如何使用Istio?](https://www.lsbin.com/wp-content/uploads/2021/11/output-from-kubectl-apply-f-samples-bookinfo-networking-bookinfo-gateway-yaml.png)
6.istioctl
用于分析配置并检查潜在问题:
istioctl analyze
如果系统没有发现问题,则会显示以下消息:
![Istio基础入门教程:如何使用Istio?](https://www.lsbin.com/wp-content/uploads/2021/11/output-from-istioctl-analyze.png)
7. 要访问在上一步中设置的网关,请设置入口变量。首先,导出INGRESS_PORT
:
export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].nodePort}')
8. 现在,重复以下过程SECURE_INGRESS_PORT
:
export SECURE_INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="https")].nodePort}')
9、使用echo命令查看端口是否分配成功:
echo "$INGRESS_PORT" && echo "$SECURE_INGRESS_PORT"
输出显示端口号:
![Istio基础入门教程:如何使用Istio?](https://www.lsbin.com/wp-content/uploads/2021/11/output-from-echo-ingress-port-and-echo-secure-ingress-port.png)
10.导出INGRESS_HOST
变量:
export INGRESS_HOST=$(minikube ip)
11. 检查变量echo
:
echo "$INGRESS_HOST"
![Istio基础入门教程:如何使用Istio?](https://www.lsbin.com/wp-content/uploads/2021/11/output-from-echo-ingress-host.png)
12. Istio用法教程:要将流量定向到 Istio Ingress Gateway,请打开一个新的终端窗口并输入以下命令:
minikube tunnel
Minikube 现在充当 Istio 的负载均衡器。输出显示 minikube 引导流量:
![Istio基础入门教程:如何使用Istio?](https://www.lsbin.com/wp-content/uploads/2021/11/output-from-minikube-tunnel.png)
13. 回到之前的终端窗口,导出GATEWAY_URL
变量,由INGRESS_HOST
和INGRESS_PORT
变量组成:
export GATEWAY_URL=$INGRESS_HOST:$INGRESS_PORT
14.使用echo
查看完整的IP地址和端口号:
echo "$GATEWAY_URL"
![Istio基础入门教程:如何使用Istio?](https://www.lsbin.com/wp-content/uploads/2021/11/output-from-echo-gateway-url.png)
15. 输入以下命令查看应用程序的外部地址:
echo http://$GATEWAY_URL/productpage
![Istio基础入门教程:如何使用Istio?](https://www.lsbin.com/wp-content/uploads/2021/11/output-from-echo-http-gatewayurl-productpage.png)
16. 复制在上一步中获得的地址并将其粘贴到网络浏览器中。Bookinfo 网站加载成功:
![Istio基础入门教程:如何使用Istio?](https://www.lsbin.com/wp-content/uploads/2021/11/accessing-the-bookinfo-test-page-in-firefox.png)
Istio基础入门教程:为 Istio 设置 Kubernetes 集群
如何使用Istio?Istio 为流行的 Istio 服务提供了许多附加组件,例如Grafana 仪表板、Jaeger 事务跟踪软件、Prometheus 指标抓取工具和 Kiali 管理控制台。
1. 通过应用samples/addons
文件夹安装这些附加组件:
kubectl apply -f samples/addons
![Istio基础入门教程:如何使用Istio?](https://www.lsbin.com/wp-content/uploads/2021/11/output-from-kubectl-apply-f-samples-addons.png)
注意:如果命令返回错误,请尝试再次执行它,因为有时会阻止成功安装。
2. 现在,为每个插件创建一个 Kubernetes Ingress 资源。通过将以下内容粘贴到yaml
文件中来执行此操作。
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: istio-system
namespace: istio-system
annotations:
kubernetes.io/ingress.class: istio
spec:
rules:
- host: my-istio-dashboard.io
http:
paths:
- path: /
pathType: Prefix
backend:
serviceName: grafana
servicePort: 3000
- host: my-istio-tracing.io
http:
paths:
- path: /
pathType: Prefix
backend:
serviceName: tracing
servicePort: 9411
- host: my-istio-logs-database.io
http:
paths:
- path: /
pathType: Prefix
backend:
serviceName: prometheus
servicePort: 9090
- host: my-kiali.io
http:
paths:
- path: /
pathType: Prefix
backend:
serviceName: kiali
servicePort: 20001
3. 保存文件并使用kubectl应用配置:
kubectl apply -f [file-name]
![Istio基础入门教程:如何使用Istio?](https://www.lsbin.com/wp-content/uploads/2021/11/output-from-apply-f-addons-ingress-yaml.png)
附加组件现已配置完毕,可以使用了。
Istio基础入门教程总结
如何使用Istio?完成本教程后,你应该能够在 Kubernetes 集群中安装和设置 Istio。你还应该知道如何使用 Istio 部署应用程序。
有关 Istio 工作原理的更多信息,请阅读Istio 是什么?– 架构、特性、优势和挑战。