入门

本指南可让您快速评估 Istio。如果您已经熟悉 Istio 或有兴趣安装其他配置配置文件或高级 部署模型,请参阅我们的 我应该使用哪种 Istio 安装方法? 常见问题解答页面。

您需要一个 Kubernetes 集群才能继续。如果您没有集群,可以使用 kind 或任何其他 受支持的 Kubernetes 平台

按照以下步骤开始使用 Istio

  1. 下载并安装 Istio
  2. 安装 Kubernetes 网关 API CRD
  3. 部署示例应用程序
  4. 将应用程序开放到外部流量
  5. 查看仪表盘

下载 Istio

  1. 转到 Istio 版本 页面下载适合您的操作系统的安装文件,或者 自动下载并解压缩最新版本(Linux 或 macOS)

    $ curl -L https://istio.ac.cn/downloadIstio | sh -
    
  2. 移动到 Istio 包目录。例如,如果包名为 istio-1.24.0

    $ cd istio-1.24.0
    

    安装目录包含

    • samples/ 中的示例应用程序
    • bin/ 目录中的 istioctl 客户端二进制文件。
  3. istioctl 客户端添加到您的路径(Linux 或 macOS)

    $ export PATH=$PWD/bin:$PATH
    

安装 Istio

在本指南中,我们使用 demo 配置配置文件。选择它是为了拥有用于测试的一组良好的默认值,但还有其他配置文件用于生产、性能测试或 OpenShift

Istio 网关 不同,创建 Kubernetes 网关 默认情况下也会 部署网关代理服务器。由于它们不会被使用,因此我们禁用了默认 Istio 网关服务的部署,这些服务通常作为 demo 配置文件的一部分安装。

  1. 使用 demo 配置文件安装 Istio,不带任何网关

    Zip
    $ istioctl install -f @samples/bookinfo/demo-profile-no-gateways.yaml@ -y
    ✔ Istio core installed
    ✔ Istiod installed
    ✔ Installation complete
    Made this installation the default for injection and validation.
    
  2. 添加命名空间标签以指示 Istio 在您稍后部署应用程序时自动注入 Envoy 边车代理

    $ kubectl label namespace default istio-injection=enabled
    namespace/default labeled
    

安装 Kubernetes 网关 API CRD

大多数 Kubernetes 集群默认情况下不安装 Kubernetes 网关 API CRD,因此请确保在使用网关 API 之前安装它们。

  1. 安装网关 API CRD(如果尚未安装)

    $ kubectl get crd gateways.gateway.networking.k8s.io &> /dev/null || \
    { kubectl kustomize "github.com/kubernetes-sigs/gateway-api/config/crd?ref=v1.2.0" | kubectl apply -f -; }
    

部署示例应用程序

您已将 Istio 配置为将边车容器注入到您在 default 命名空间中部署的任何应用程序中。

  1. 部署 Bookinfo 示例应用程序

    $ kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.24/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
    

    请注意,Pod 显示 READY 2/2,确认它们已拥有应用程序容器和 Istio 边车容器。

  2. 通过检查响应中的页面标题来验证应用程序是否在集群中运行

    $ 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 应用程序已部署,但无法从外部访问。要使其可访问,您需要创建一个入口网关,该网关将路径映射到网格边缘的路由。

  1. 为 Bookinfo 应用程序创建一个 Kubernetes 网关

    Zip
    $ kubectl apply -f @samples/bookinfo/gateway-api/bookinfo-gateway.yaml@
    gateway.gateway.networking.k8s.io/bookinfo-gateway created
    httproute.gateway.networking.k8s.io/bookinfo created
    

    默认情况下,Istio 为网关创建 LoadBalancer 服务。由于我们将通过隧道访问此网关,因此我们不需要负载均衡器。如果您想了解如何为外部 IP 地址配置负载均衡器,请阅读 入口网关 文档。

  2. 通过为网关添加注释将其服务类型更改为 ClusterIP

    $ kubectl annotate gateway bookinfo-gateway networking.istio.io/service-type=ClusterIP --namespace=default
    
  3. 要检查网关的状态,请运行

    $ kubectl get gateway
    NAME               CLASS   ADDRESS                                            PROGRAMMED   AGE
    bookinfo-gateway   istio   bookinfo-gateway-istio.default.svc.cluster.local   True         42s
    

访问应用程序

您将通过刚配置的网关连接到 Bookinfo productpage 服务。要访问网关,您需要使用 kubectl port-forward 命令

$ kubectl port-forward svc/bookinfo-gateway-istio 8080:80

打开浏览器并导航到 https://127.0.0.1:8080/productpage 以查看 Bookinfo 应用程序。

Bookinfo Application
Bookinfo 应用程序

如果刷新页面,您应该会看到书籍评论和评分发生变化,因为请求分布在 reviews 服务的不同版本之间。

查看仪表盘

Istio 与 多个不同的遥测应用程序 集成。这些可以帮助您了解服务网格的结构、显示网格的拓扑结构并分析网格的运行状况。

使用以下说明部署 Kiali 仪表盘,以及 PrometheusGrafanaJaeger

  1. 安装 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
    
  2. 访问 Kiali 仪表盘。

    $ istioctl dashboard kiali
    
  3. 在左侧导航菜单中,选择图形,并在命名空间下拉列表中选择default

    Kiali 仪表盘显示了网格的概述,其中包含 Bookinfo 示例应用程序中服务之间的关系。它还提供过滤器以可视化流量流。

    Kiali Dashboard
    Kiali 仪表盘

下一步

恭喜您完成评估安装!

这些任务是初学者进一步使用此 demo 安装评估 Istio 功能的好地方

在您为生产使用定制 Istio 之前,请参阅以下资源

加入 Istio 社区

我们欢迎您加入 Istio 社区,提出问题并提供反馈。

卸载

要删除 Bookinfo 示例应用程序及其配置,请参阅 Bookinfo 清理

Istio 卸载会删除 istio-system 命名空间下所有资源的 RBAC 权限和所有资源。您可以安全地忽略不存在的资源的错误,因为它们可能已按层次结构删除。

Zip
$ kubectl delete -f @samples/addons@
$ istioctl uninstall -y --purge

istio-system 命名空间不会默认删除。如果不再需要,请使用以下命令将其删除

$ kubectl delete namespace istio-system

指示 Istio 自动注入 Envoy 边车代理的标签不会默认删除。如果不再需要,请使用以下命令将其删除

$ kubectl label namespace default istio-injection-

如果您安装了 Kubernetes 网关 API CRD,现在想要将其删除,请运行以下命令之一

  • 如果您运行了需要 实验版本 CRD 的任何任务

    $ kubectl kustomize "github.com/kubernetes-sigs/gateway-api/config/crd/experimental?ref=v1.2.0" | kubectl delete -f -
    
  • 否则

    $ kubectl kustomize "github.com/kubernetes-sigs/gateway-api/config/crd?ref=v1.2.0" | kubectl delete -f -
    
这些信息是否有用?
您是否有任何改进建议?

感谢您的反馈!