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都不能进行注入,也可以选择对有此标签的才进行注入,多个标签间是或的关系。
格式如下:
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就可以访问
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!