安装Istio

半兽人 发表于: 2019-11-21   最后更新时间: 2021-11-23 23:42:34  
{{totalSubscript}} 订阅, 6,195 游览

这些文章假定您是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-ingressgatewayEXTERNAL-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

部署一个例子

  1. 部署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
    
  2. 该应用程序将启动。当每个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/2STATUS Running,然后再继续下一步。 这可能需要几分钟,具体取决于您的平台。

  3. 验证到目前为止一切正常。通过检查响应中的页面标题,运行以下命令以查看应用程序是否正在集群中运行并返回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网关,该网关将路径映射到网格边缘处的路线。

  1. 将此应用程序与Istio网关相关联:

    $ kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml
    gateway.networking.istio.io/bookinfo-gateway created
    virtualservice.networking.istio.io/bookinfo created
    
  2. 确保配置没有问题:

    $ istioctl analyzeNo validation issues found when analyzing namespace: default.
    

确定入口IP和端口

请按照以下说明设置用于访问网关的INGRESS_HOSTINGRESS_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应用程序。

  1. 运行以下命令以获取Bookinfo应用程序的外部地址。

    $ echo "http://$GATEWAY_URL/productpage"
    
  2. 将前一个命令的输出粘贴到Web浏览器中,并确认已显示Bookinfo产品页面。

查看仪表盘

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. 在左侧导航菜单中,选择图形,然后在命名空间下拉列表中,选择默认值。

    Kiali仪表板显示了网格的概述以及Bookinfo示例应用程序中服务之间的关系。 它还提供了过滤器以可视化交通流。

    screenshot

接下来

恭喜您完成评估版安装!

以下的步骤来是理解Istio功能不错的起点:

下一步是自定义Istio并部署您自己的应用程序,请参考以下资源:

更新于 2021-11-23

查看istio更多相关的文章或提一个关于istio的问题,也可以与我们一起分享文章