istio 初体验

istio 初体验

使用虚拟机搭建 minikube + istio,体验 istio
设置 cpu 2 核,内存 4G

Istio 知识图

istio 架构

虚拟机

  • 使用 VMWare,镜像为 centos7

安装步骤

关闭防火墙

  • 关闭防火墙
    1
    2
    $ systemctl disable firewalld
    $ systemctl stop firewalld

安装 Docker

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2

$ sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo

$ sudo yum update -y

$ sudo yum install docker-ce -y

$ systemctl enable docker
$ systemctl start docker

安装 kubectl

1
2
3
4
5
$ curl -LO https://storage.googleapis.com/kubernetes-release/release/`curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt`/bin/linux/amd64/kubectl

$ install kubectl /usr/local/bin/kubectl

$ which kubectl

安装 minikube

1
2
3
4
5
6
$ curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 \
&& sudo install minikube-linux-amd64 /usr/local/bin/minikube

$ which minikube

$ minikube start --vm-driver=none

安装 istioctl

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

安装 istio 核心

  • 进入到上一步下载的文件夹中执行如下操作

    1
    2
    3
    4
    # 安装istio自定义的一些 k8s crd
    $ for i in install/kubernetes/helm/istio-init/files/crd*yaml; do kubectl apply -f $i; done

    $ kubectl apply -f install/kubernetes/istio-demo.yaml
  • 验证安装:

    1
    2
    $ kubectl get svc -n istio-system
    $ kubectl get pods -n istio-system

运行bookinfo示例

部署服务

1
2
3
4
5
6
7
8
# 给 default namespace 打标签,启动 istio reject
$ kubectl label namespace default istio-injection=enabled

$ kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml

# 验证
$ kubectl get services
$ kubectl get pods

部署 gateway

1
$ kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml
  • 要确认Bookinfo应用程序正在运行,请通过curl某个Pod中的命令向其发送请求,例如ratings:
    1
    2
    $ kubectl exec -it $(kubectl get pod -l app=ratings -o jsonpath='{.items[0].metadata.name}') -c ratings -- curl productpage:9080/productpage | grep -o "<title>.*</title>"
    <title>Simple Bookstore App</title>

确定入口IP和端口

Istio的一些简单功能

  • 基于上述的demo,测试一些 istio 的简单功能

基于权重的路由

  • 通过CRD DestinationRule创建3 个reviews 子版本:

    1
    $ kubectl apply -f samples/bookinfo/networking/destination-rule-reviews.yaml
  • 通过CRD VirtualService 调整个 reviews 服务子版本的流量比例, 设置 v1 和 v3 各占 50%

    1
    $ kubectl apply -f samples/bookinfo/networking/virtual-service-reviews-50-v3.yaml
  • 刷新页面, 可以看到无法再看到reviews v2的内容, 页面在v1和v3之间切换.

基于内容路由

  • 修改reviews CRD, 将jason 登录的用户版本路由到v2, 其他用户路由到版本v3.

    1
    $ kubectl apply -f samples/bookinfo/networking/virtual-service-reviews-jason-v2-v3.yaml
  • 刷新页面, 使用jason登录的用户, 将看到v2 黑色星星版本, 其他用户将看到v3 红色星星版本.