Istio分步指南(二):Istio 入门
原文地址 https://medium.com/faun/istio-step-by-step-part-02-getting-started-with-istio-c24ed8137741
嗨!欢迎来到我的 Istio 分步教程系列。通过本教程,我将告诉您如何在 Kubernetes 环境中安装 Istio。 (Linux OS)
请注意,
新版本已经过时了。但这适用于 1.0 版本。如果您使用的是 1.4 或更高版本,请参阅我的 Tutorial 10-在 Minikube 中安装 Istio 1.4。
首先,根据您的操作系统下载相应的安装文件。如果您使用的是 Linux OS,则可以运行以下命令。
1
curl -L https://git.io/getLatestIstio | sh -
接下来,将 bin 路径添加到本地变量 PATH(如在控制台中一样)。
然后 cd 到 Istio 软件包目录
1
cd istio-1.0.2
到目前为止,您已经下载了 Istio 并成功将 bin 路径设置为环境变量。让我们看下一部分。
我希望您已经安装了 minikube VM,并且该 VM 正在本地计算机上运行(您可以参考此视频以获取帮助)
第一步,您必须通过 kubectl apply
安装 Istio 的自定义资源
1
kubectl apply -f install/kubernetes/helm/istio/templates/crds.yaml
(由于我已经在笔记本电脑中安装了 Istio,它显示的文件未更改)
接下来,您必须安装 Istio 的核心组件。有 4 个选项可供选择:
- 无需在 sidecar 之间进行相互 TLS 身份验证
- 在 sidecar 之间具有相互 TLS 身份验证
- 使用 Helm 渲染 Kubernetes 配置文件并使用
kubectl
进行部署 - 使用 Helm 和 Tiller 来管理 Istio 部署
Istio 支持两种身份验证,即 Transport authentication 和 Origin authentication。
Transport authentication 也称为“服务到服务的身份验证”。此方法验证建立连接的直接客户端。相互 TLS 是用于传输身份验证的完整堆栈解决方案。您可以轻松打开此功能,而无需更改服务代码。
Origin authentication 也称为最终用户身份验证,它验证发出请求的原始客户端是否为最终用户。 Istio 通过 JSON Web 令牌(JWT)验证和 AuthO,Firebase Auth,Google Auth…等实现请求级身份验证。
相互 TLS 或相互传输层安全性是指双方同时进行身份验证。在 Istio 中,服务到服务的通信是通过客户端和服务器端 envoy 代理进行的。为使客户端调用服务器,需要完成以下步骤。
-
Istio 将来自客户端的出站流量重新路由到客户端的本地 Sidecar Envoy。
-
然后,客户端 Envoy 与服务器端 Envoy 开始相互 TLS 握手。在握手期间,客户端 Envoy 还会进行安全的命名检查,以验证服务器证书中提供的服务帐户是否有权运行目标服务。(安全命名信息包含服务器身份的 N 到 N 映射,这些映射以证书形式编码到发现服务或 DNS 引用的服务名称)
-
接下来,客户端 Envoy 和服务器端 Envoy 建立双向 TLS 连接,Istio 将流量从客户端 Envoy 转发到服务器端 Envoy。
-
最后,在授权后,服务器端 Envoy 通过本地 TCP 连接将流量转发到服务器服务。
现在,让我们回到安装部分。
选项 01 - 建议将其与具有现有应用程序的群集以及具有 Istio sidecar 的服务需要能够与其他非 Istio Kubernetes 服务进行通信的应用程序一起使用。
1
kubectl apply -f install/kubernetes/istio-demo.yaml
选项 02 - 此选项仅适用于
该选项适用于新的 Kubernetes 集群,在该集群中,新部署的工作负载可确保安装了 Istio sidecars。
1
kubectl apply -f install/kubernetes/istio-demo-auth.yaml
在本教程中,我选择选项 02。然后,您必须验证安装是否成功。
首先,您必须确保是否部署了以下 Kubernetes 服务。
istio-pilot
istio-ingressgateway
istio-policy
istio-telemetry
prometheus
istio-galley
istio-sidecar-injector
(这是可选的)
运行命令
1
kubectl get svc -n istio-system
如果 istio-ingressgateway 的 External-IP 为 pending,则表示您的群集正在不支持外部负载均衡器(例如 minikube)的环境中运行。因此,您将需要服务 NodePort 或端口转发来访问它。
接下来,确保部署了相应的 Kubernetes Pod,并且所有容器都已启动并正在运行。
istio-pilot-*
istio-ingressgateway-*
istio-egressgateway-*
istio-policy-*
istio-telemetry-*
istio-citadel-*
prometheus-*
istio-galley-*
istio-sidecar-injector-*
(可选)
运行命令
1
kubectl get pods -n istio-system
至此,您已经完成了安装部分,现在可以部署应用程序了。
如果要卸载 Istio 核心组件,可以根据安装 Istio 的方式使用以下相应命令。
-
如果您使用
istio-demo.yaml
安装了 Istio((没有在小车之间进行相互 TLS 身份验证的 Istio):$ kubectl delete -f install/kubernetes/istio-demo.yaml
-
如果您使用
istio-demo-auth.yaml
安装了 Istio((在小车之间具有相互 TLS 身份验证的 Istio):$ kubectl delete -f install/kubernetes/istio-demo-auth.yaml
这是我的视频教程链接。
以上就是本教程的全部内容。希望你会喜欢,欢迎您的评论,您的反馈意见对我非常重要,对此我深表谢意。下一章我们将讲解有关如何在 Istio 中部署应用程序,咱们下一篇见。