istio快速入门

第一步:

找到对应的版本

 

第二步:

执行yaml文件

[root@VM-0-15-centos istio-1.5.9]# kubectl apply -f istio-1.5.9/install/kubernetes/istio-demo.yaml

第三步

等待pod都running,这里可能等待时间较长,因为要拉取镜像,如果有拉取镜像失败,可以尝试docker pull去拉取

第四步:

创建pod,这里要注意的是一个service关联了2个deployment,并且2个deployment内容并不一样,一个v1,一个v2

[root@VM-0-15-centos ~]# cat flaskapp.yaml 
apiVersion: v1
kind: Service
metadata:
  name: flaskapp
  labels:
    app: flaskapp
spec:
  selector:
    app: flaskapp
  ports:
  - name: http
    port: 80
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: flaskapp-1
spec:
  replicas: 1
  selector:
    matchLabels:
      app: flaskapp
  template:
    metadata: 
      labels:
        app: flaskapp
        version: v1
    spec:
      containers:
      - name: flaskapp
        image: dustise/flaskapp
        imagePullPolicy: IfNotPresent
        env:
        - name: version
          value: v1
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: flaskapp-2
spec:
  replicas: 1
  selector:
    matchLabels:
      app: flaskapp
  template:
    metadata:
      labels:
        app: flaskapp
        version: v2
    spec:
      containers:
      - name: flaskapp
        image: dustise/flaskapp
        imagePullPolicy: IfNotPresent
        env:
        - name: version
          value: v2
[root@VM-0-15-centos ~]# kubectl apply -f flaskapp.yaml 
service/flaskapp created
deployment.apps/flaskapp-1 created
deployment.apps/flaskapp-2 created

查看pod

 

 

 现在我们将istio注入到pod,可以看到istio已经注入到pod当中了

 

部署客户端,如下:

[root@VM-0-15-centos ~]# vim sleep.yaml
kind: Service
metadata:
  name: sleep
  labels:
    app: sleep
    version: v1
spec:
  selector:
    app: sleep
    version: v1
  ports:
  - name: ssh
    port: 80
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: sleep
spec:
  selector:
    matchLabels:
      app: sleep
      version: v1
  replicas: 1
  template:
    metadata:
      labels:
        app: sleep
        version: v1
    spec:
      containers:
      - name: sleep
        image: dustise/sleep
        imagePullPolicy: IfNotPresent
[root@VM-0-15-centos ~]# kubectl apply -f sleep.yaml 
service/sleep created
deployment.apps/sleep created

给sleep.yaml也加上istio

[root@VM-0-15-centos ~]# istioctl kube-inject -f sleep.yaml | kubectl apply -f -

查看

 

 

 

验证服务,可以看到基本上是轮调

 

 接下来我们用istio来控制这2个服务的流量,我们定义一个名字为flaskapp的destinationrule,它利用Pod标签把flaskapp服务分成两个subset,分别为v1和v2

[root@VM-0-15-centos ~]# cat flaskapp-destinationrule.yaml 
apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
  name: flaskapp
spec:
  host: flaskapp
  subsets:
  - name: v1
    labels:
      version: v1
  - name: v2
    labels:
      version: v2
[root@VM-0-15-centos ~]# kubectl apply -f flaskapp-destinationrule.yaml 
destinationrule.networking.istio.io/flaskapp created

接下来就需要为flaskapp服务创建默认规则,不论是否进行进一步的流量控制,我们都应该给它创建默认路由,以防止发生意料之外的访问结果

如下:我们定义的规则为凡是访问flaskapp这个主机的都交给v2这台主机做相应

[root@VM-0-15-centos ~]# vim flaskapp-default-vs-v2.yaml 
kind: VirtualService
metadata:
  name: flaskapp-default-v2
spec:
  hosts:
  - flaskapp
  http:
  - route:
    - destination:
        host: flaskapp
        subset: v2
[root@VM-0-15-centos ~]# kubectl apply -f flaskapp-default-vs-v2.yaml 
virtualservice.networking.istio.io/flaskapp-default-v2 created

再次验证,可以看到流量都跑到了v2上面

 istio其他操作

以上是手动注入istio,我们也可以自动注入istio

  • 如果将 sidecarinjectorWebhook enabled 设置为 true 就会开启 Sidecar 自动注入特性
  • 如果将 enableNamesp cesByDefault 变量赋值为 true ,就会为所有命名空间开启自动注入功能,如果赋值为false,则只有标签为istio-injection:enabled的命名空间才会开启自动注入功能·
  • autolnject 这个变量命名有歧义 它的 enabled di abl 赋值,设置的并不是是否开启自动注入功能,而是在启用自动注入功之后,对于指定命名空间内新建Pod 是否进行自动注人 如果取值为 enabled,则该命名空间内的pod只要没有被注解为sidecar.istio.io/inject: "false",就会自动完成注入,如果取值为disabled,则需要为pod设置注解sidecar. istio.io/inject:”true”,才会进行注入

案例:

我们常见了2个命名空间auto和manually,并且给auto打上自动注入istio的标签

 

 

 然后分别在这两个命名空间下创建pod,可以看到,auto下的pod自动注入了istio,而manually下的pod却没有

istio的自动注入可与根据标签进行例外设置,不管命名空 标签及策略如何 对符和标签选择器要求的pod都不能进行注入,也可以选择对有此标签的才进行注入,多个标签间是或的关系。

对于包含 openshift. io/bu ild narne 或者 pen shift. io/deployerpod-for. name 签的 Pod 不管标签取值是什么,都不会进行注入
自动注入的顺序评估为Pod 注解→ everlnjectSe lector → AlwaysinjectSelector→命名空间策略

 

格式如下:

 

 

 

 

istio-grafana安装

默认istio的grafana是没有安装的,我们可以选择安装

[root@VM-0-15-centos istio-1.5.9]# helm template ./install/kubernetes/helm/istio -n test --set grafana.enabled=true --namespace istio-system > default-grafana.yaml 

 

然后修改service以便访问

 

 打开浏览器

 

如果要打开prometheus直接编辑svc就可以访问

 

 

 

 

 

 
posted @ 2020-08-20 18:06  力王7314  阅读(1032)  评论(0编辑  收藏  举报