文档章节

Service Mesh-Istio安装与使用

openthings
 openthings
发布于 2018/04/11 09:59
字数 2193
阅读 1280
收藏 3

Service Mesh-Istio安装与使用

本文根据官网的文档整理而成,步骤包括安装istio 0.5.1并创建一个bookinfo的微服务来测试istio的功能。

文中使用的yaml文件可以在kubernetes-handbookmanifests/istio目录中找到,如果镜像pull失败,请根据官网的镜像自行修改。

安装环境

  • CentOS 7.4.1708
  • Docker 17.12.0-ce
  • Kubernetes 1.8.5

安装

1.下载安装包

下载地址:https://github.com/istio/istio/releases

下载Linux版本的当前最新版安装包:

wget https://github.com/istio/istio/releases/download/0.5.1/istio-0.5.1-linux.tar.gz

目前,最新的是0.8版本(https://my.oschina.net/u/2306127/blog/1831807)。

wget https://github.com/istio/istio/releases/download/0.8/istio-0.8-linux.tar.gz

2.解压

解压后,得到的目录结构如下:

├── bin
│   └── istioctl
├── install
│   ├── ansible
│   ├── consul
│   ├── eureka
│   ├── gcp
│   ├── kubernetes
│   ├── README.md
│   └── tools
├── istio.VERSION
├── LICENSE
├── README.md
├── samples
│   ├── bookinfo
│   ├── CONFIG-MIGRATION.md
│   ├── helloworld
│   ├── httpbin
│   ├── kubernetes-blog
│   ├── rawvm
│   ├── README.md
│   └── sleep
└── tools
    ├── cache_buster.yaml
    ├── deb
    ├── githubContrib
    ├── minikube.md
    ├── perf_istio_rules.yaml
    ├── perf_k8svcs.yaml
    ├── README.md
    ├── rules.yml
    ├── setup_perf_cluster.sh
    ├── setup_run
    ├── update_all
    └── vagrant

从文件里表中可以看到,安装包中包括了kubernetes的yaml文件,示例应用和安装模板。

3.先决条件

以下说明要求您可以访问启用了RBAC(基于角色的访问控制)的Kubernetes1.7.3或更新的群集。您还需要安装1.7.3或更高版本。如果您希望启用automatic sidecar injection,则需要Kubernetes 1.9或更高版本。kubectl

注意:如果您安装了Istio 0.1.x,请在安装新版本之前彻底卸载它(包括适用于所有启用Istio的应用程序窗口的Istio支架)。 安装或升级Kubernetes CLIkubectl以匹配群集支持的版本(CRD支持版本为1.7或更高版本)。

根据您的Kubernetes提供者:

要在本地安装Istio,请安装最新版本的Minikube(版本0.22.1或更高版本)。

4.安装步骤

从0.2版本开始,Istio安装在它自己的istio-system命名空间中,并且可以管理来自所有其他命名空间的服务。

转至Istio发布页面以下载与您的操作系统相对应的安装文件。如果您使用的是MacOS或Linux系统,以下命令自动下载并提取最新版本:

curl -L https://git.io/getLatestIstio | sh -

解压缩安装文件并将目录更改为文件位置。

安装目录包含

Installation .yaml Kubernetes的安装文件
Sample/ 示例应用程序
bin/istioctl 二进制bin/文件 在手动注入Envoy作为附属代理并创建路由规则和策略时使用.
istio.VERSION配置文件

例如,如果包是istio-0.5(初步)

cd istio-0.5 (preliminary)

将istioctl客户端添加到您的PATH。例如,在MacOS或Linux系统上运行以下命令:

export PATH=$PWD/bin:$PATH

安装Istio的核心组件。从下面两个互相排斥的选项中选择一个,或者用Helm Chart交替安装: a)安装Istio而不启用侧车间的相互TLS认证。为具有现有应用程序的群集,使用Istio辅助车的服务需要能够与其他非Istio Kubernetes服务以及使用活动性和准备就绪探测器,无头服务或StatefulSets的应用程序通信的应用程序选择此选项。

kubectl apply -f install/kubernetes/istio.yaml

要么

b)安装Istio并启用侧柜之间的相互TLS认证:

kubectl apply -f install/kubernetes/istio-auth.yaml

这两个选项都会创建istio-system命名空间以及所需的RBAC权限,并部署Istio-Pilot,Istio-Mixer,Istio-Ingress和Istio-CA(证书颁发机构)。

可选:如果您的群集的Kubernetes版本是1.9或更高,并且您希望启用自动代理注入,请安装sidecar injector webhook。 验证安装 请确保以下Kubernetes服务部署:istio-pilot,istio-mixer,istio-ingress。

kubectl get svc -n istio-system
NAME            CLUSTER-IP      EXTERNAL-IP       PORT(S)                       AGE
istio-ingress   10.83.245.171   35.184.245.62     80:32730/TCP,443:30574/TCP    5h
istio-pilot     10.83.251.173   <none>            8080/TCP,8081/TCP             5h
istio-mixer     10.83.244.253   <none>            9091/TCP,9094/TCP,42422/TCP   5h

注意:如果您的集群中不支持外部负载平衡(例如,Minikube)的环境中运行,该external-ip的istio-ingress会显示。您必须使用NodePort访问应用程序,或使用端口转发。

修改istio.yaml中的istio-ingress service的type为ClusterIP,并设置nodePort,默认为32000。

确保相应Kubernetes容器都运行起来:istio-pilot-*istio-mixer-*istio-ingress-*istio-ca-*,和可选的istio-sidecar-injector-*

kubectl get pods -n istio-system
istio-ca-3657790228-j21b9                1/1       Running   0          5h
istio-ingress-1842462111-j3vcs           1/1       Running   0          5h
istio-sidecar-injector-184129454-zdgf5   1/1       Running   0          5h
istio-pilot-2275554717-93c43             1/1       Running   0          5h
istio-mixer-2104784889-20rm8             2/2       Running   0          5h

部署您的应用程序

您现在可以部署您自己的应用程序或者像Bookinfo一样随安装提供的示例应用程序之一。注意:应用程序必须对所有HTTP通信使用HTTP/1.1或HTTP/2.0协议,因为HTTP/1.0不受支持。

如果您启动了Istio-sidecar-injector,如上所示,您可以直接使用应用程序部署应用程序kubectl create。

Istio Sidecar注入器会自动将Envoy容器注入到您的应用程序窗格中,假设运行在标有名称空间的名称空间中istio-injection=enabled

kubectl label namespace <namespace> istio-injection=enabled
kubectl create -n <namspace> -f <your-app-spec>.yaml

如果您没有安装Istio-sidecar-injector,则在部署它们之前,必须使用istioctl kube-inject将Envoy容器手动注入应用程序窗格中:

kubectl create -f <(istioctl kube-inject -f <your-app-spec>.yaml)

卸载

卸载Istio sidecar进样器:

如果您启用Istio-sidecar-injector,请将其卸载:

kubectl delete -f install/kubernetes/istio-sidecar-injector-with-ca-bundle.yaml

卸载Istio核心组件。对于0.6(初始)发行版,卸载将删除RBAC权限,istio-system命名空间和分层下的所有资源。忽略不存在资源的错误是安全的,因为它们可能已被分层删除。

a)如果您在禁用相互TLS身份验证的情况下安装了Istio:

kubectl delete -f install/kubernetes/istio.yaml

要么

b)如果您在启用相互TLS身份验证的情况下安装了Istio:

kubectl delete -f install/kubernetes/istio-auth.yaml

7.安装监控插件

安装插件

kubectl apply -f install/kubernetes/addons/prometheus.yaml
kubectl apply -f install/kubernetes/addons/grafana.yaml
kubectl apply -f install/kubernetes/addons/servicegraph.yaml
kubectl apply -f install/kubernetes/addons/zipkin.yaml

在traefik ingress中增加增加以上几个服务的配置,同时增加istio-ingress配置。

    - host: grafana.istio.io
      http:
        paths:
        - path: /
          backend:
            serviceName: grafana
            servicePort: 3000
    - host: servicegraph.istio.io
      http:
        paths:
        - path: /
          backend:
            serviceName: servicegraph
            servicePort: 8088
    - host: prometheus.istio.io
      http:
        paths:
        - path: /
          backend:
            serviceName: prometheus
            servicePort: 9090
    - host: zipkin.istio.io
      http:
        paths:
        - path: /
          backend:
            serviceName: zipkin
            servicePort: 9411
    - host: ingress.istio.io
      http:
        paths:
        - path: /
          backend:
            serviceName: istio-ingress
            servicePort: 80

测试

我们使用Istio提供的测试应用bookinfo微服务来进行测试。

该微服务用到的镜像有:

istio/examples-bookinfo-details-v1
istio/examples-bookinfo-ratings-v1
istio/examples-bookinfo-reviews-v1
istio/examples-bookinfo-reviews-v2
istio/examples-bookinfo-reviews-v3
istio/examples-bookinfo-productpage-v1

该应用架构图如下:

BookInfo Sample应用架构图

图片 - BookInfo Sample应用架构图

部署应用

kubectl create -f <(istioctl kube-inject -f samples/apps/bookinfo/bookinfo.yaml)

Istio kube-inject命令会在bookinfo.yaml文件中增加Envoy sidecar信息。参考:https://istio.io/docs/reference/commands/istioctl.html#istioctl-kube-inject

在本机的/etc/hosts下增加VIP节点和ingress.istio.io的对应信息,具体步骤参考:边缘节点配置,或者使用gateway ingress来访问服务,

如果将productpage配置在了ingress里了,那么在浏览器中访问http://ingress.istio.io/productpage,如果使用了istio默认的gateway ingress配置的话,ingress service使用nodePort方式暴露的默认使用32000端口,那么可以使用http://任意节点的IP:32000/productpage来访问。

BookInfo Sample页面

图片 - BookInfo Sample页面

多次刷新页面,你会发现有的页面上的评论里有星级打分,有的页面就没有,这是因为我们部署了三个版本的应用,有的应用里包含了评分,有的没有。Istio根据默认策略随机将流量分配到三个版本的应用上。

查看部署的bookinfo应用中的productpage-v1 service和deployment,查看productpage-v1的pod的详细json信息可以看到这样的结构:

$ kubectl get pod productpage-v1-944450470-bd530 -o json

productpage-v1-istio.json文件。从详细输出中可以看到这个Pod中实际有两个容器,这里面包括了initContainer,作为istio植入到kubernetes deployment中的sidecar。

"initContainers": [
            {
                "args": [
                    "-p",
                    "15001",
                    "-u",
                    "1337"
                ],
                "image": "docker.io/istio/init:0.1",
                "imagePullPolicy": "Always",
                "name": "init",
                "resources": {},
                "securityContext": {
                    "capabilities": {
                        "add": [
                            "NET_ADMIN"
                        ]
                    }
                },
                "terminationMessagePath": "/dev/termination-log",
                "terminationMessagePolicy": "File",
                "volumeMounts": [
                    {
                        "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount",
                        "name": "default-token-3l9f0",
                        "readOnly": true
                    }
                ]
            },
            {
                "args": [
                    "-c",
                    "sysctl -w kernel.core_pattern=/tmp/core.%e.%p.%t \u0026\u0026 ulimit -c unlimited"
                ],
                "command": [
                    "/bin/sh"
                ],
                "image": "alpine",
                "imagePullPolicy": "Always",
                "name": "enable-core-dump",
                "resources": {},
                "securityContext": {
                    "privileged": true
                },
                "terminationMessagePath": "/dev/termination-log",
                "terminationMessagePolicy": "File",
                "volumeMounts": [
                    {
                        "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount",
                        "name": "default-token-3l9f0",
                        "readOnly": true
                    }
                ]
            }
        ],

监控

不断刷新productpage页面,将可以在以下几个监控中看到如下界面。

Grafana页面

http://grafana.istio.io

Istio Grafana界面

图片 - Istio Grafana界面

Prometheus页面

http://prometheus.istio.io

Prometheus页面

图片 - Prometheus页面

Zipkin页面

http://zipkin.istio.io

Zipkin页面

图片 - Zipkin页面

ServiceGraph页面

http://servicegraph.istio.io/dotviz

可以用来查看服务间的依赖关系。

访问 http://servicegraph.istio.io/graph 可以获得json格式的返回结果。

ServiceGraph页面

图片 - ServiceGraph页面

更进一步

BookInfo示例中有三个版本的reviews,可以使用istio来配置路由请求,将流量分发到不同版本的应用上。参考Configuring Request Routing

还有一些更高级的功能,我们后续将进一步探索。

参考

本文转载自:https://jimmysong.io/kubernetes-handbook/usecases/istio-installation.html

openthings
粉丝 325
博文 1140
码字总数 689435
作品 1
东城
架构师
私信 提问
使用istio治理微服务入门

使用istio治理微服务入门 Tony Bai2018-01-031 阅读 containerdeployment 近两年 微服务架构 流行,主流互联网厂商内部都已经微服务化,初创企业虽然技术积淀不行,但也通过各种开源工具拥抱...

Tony Bai
2018/01/03
0
0
阿里云Kubernetes Service Mesh实践进行时(2): 通过示例深入Istio

概述 上一篇文章已经介绍了Istio及其各个核心组件,并且在阿里云Kubernetes容器服务基础之上,介绍了如何快速搭建一套用于连接、管理以及安全化微服务的开放平台。 阿里云Kubernetes Servic...

osswangxining
2018/06/06
0
0
阿里云Kubernetes Service Mesh实践进行时(5): 遥测数据收集、查询及可视化

概述 本系列文章已经通过一个官方示例演示了如何部署应用到上述Istio环境中,并演示了如何设置智能路由、分布式追踪等。 阿里云Kubernetes Service Mesh实践进行时(1): Istio初体验 阿里云K...

osswangxining
2018/06/06
0
0
阿里云容器服务基于Istio实现Kubernetes与ECS上的应用服务混合编排

概述 在前面系列文章中已经介绍了Istio及其各个核心组件,详述了如何利用阿里云Kubernetes容器服务,快速搭建一套用于连接、管理以及保护微服务的开放平台Istio,为应用引入和配置多个相关服...

osswangxining
2018/08/04
0
0
图文直击 | 北美KubeCon爆点之Service Mesh

导读 服务网格(Service Mesh)是本次大会的最热门话题之一,北美KubeCon第一天有不少Keynote和Session围绕Istio、Linkerd和Conduit等热门的Service Mesh项目展开,故挑选其中比较有代表的分...

lq1ns259ej3okyvk4jf
2017/12/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

idea修改新的git地址

我们在项目变动中通常会遇到更换git地址情况,这里介绍一个在idea项目中简单更换git地址操作: 1、点击VCS; 2、点击Git; 3、点击Remotes; 具体步骤如图 4、点击框中链接即可在右边看到一个...

west_coast
23分钟前
6
0
将规则集传递给mixin

允许包装在mixin中定义的css块。 分离的规则集是一组CSS属性、嵌套规则集、媒体声明或者是存储在变量中的任何其他内容,我们可以将它包含在规则集中或其他结构中,并且所有属性都将复制到那里...

凌兮洛
24分钟前
4
0
玩转阿里云 Terraform(一):Terraform 是什么

从本文起,我将陆续推出一系列有关 Terraform 的文章,从概念,特点,工作机制,用法以及最佳实践等多个方面由浅入深的向大家介绍如何在阿里云上玩转 Terraform。同时也希望借此机会,与感兴...

阿里云官方博客
24分钟前
4
0
科研大数据面临的挑战

近几十年硬件的发展非常迅猛,第一台Macintosh苹果电脑的内存是128KB(0.13MB),现在很多笔记本配的是8GB的内存,硬盘1TB(1024GB),2TB的很常见。大型的数据服务器上还会有更大的储容量,...

英论阁学术院
25分钟前
5
0
python学习10.09:Python列表和元组的底层实现

有关列表(list)和元组(tuple)的底层实现,本节分别从它们的源码来进行分析。 首先来分析 list 列表,它的具体结构如下所示: typedef struct { PyObject_VAR_HEAD /* Vector o...

太空堡垒185
26分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部