第一步:
找到对应的版本
第二步:
执行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
验证服务,可以看到基本上是轮调
接下来我们用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
再次验证