1.环境准备:
K8s集群,已经实现了k8s-app小例子,可以正常访问。(已包含docker)
在此基础上对项目进行改进,实现istio流量切换。
2.安装部署istio
2.1 安装go
官网下载go和istio的安装包,上传到k8s集群虚拟机上(三个机器都安装)
[root@node1 ~]# cd /root/Public/istio
[root@master istio]# ls
go1.20.6.linux-amd64.tar.gz istio-1.4.5.tar.gz
[root@master istio]# tar -C /usr/local -xzf go1.20.6.linux-amd64.tar.gz
[root@master istio]# vi /etc/profile #设置PATH和GOPATH
export PATH=$PATH:/usr/local/go/bin
export GOPATH=$HOME/go
$ source /etc/profile
验证安装是否成功:
在刚才设置的GOPATH目录下创建一个级联目录src/hello(完成的目录应该是$HOME/go/src/hello,或者读者自己设置的目录),在这个目录下新建一个文件 hello.go
[root@master hello]# pwd
/root/go/src/hello
[root@master hello]# touch hello.go
[root@master hello]# vi hello.go
package main
import "fmt"
func main() {
fmt.Println("hello, go")
}
[root@master hello]# go run hello.go
hello, go
如果能在终端中看到打印出了“hello, go”,则说明Go语言安装成功了。
2.2 安装istio
[root@node1 hello]# cd /root/Public/istio
[root@master istio]# ls
go1.20.6.linux-amd64.tar.gz istio-1.6.8-linux-amd64.tar.gz
[root@master istio]# tar -zxvf istio-1.6.8-linux-amd64.tar.gz
[root@master istio]# mv istio-1.6.8 /usr/local/istio
[root@master istio]# export PATH=$PATH:/usr/local/istio/bin
[root@master istio]# source /etc/profile
## 验证安装是否成功:
[root@master istio]# istioctl version
no running Istio pods in "istio-system"
1.6.8
2.3 部署istio
[root@master istio]# istioctl manifest apply --set profile=demo
✔ Istio core installed
✔ Istiod installed
✔ Ingress gateways installed
✔ Egress gateways installed
✔ Addons installed
✔ Installation complete [root@master istio]# kubectl get pod -n istio-system
NAME READY STATUS RESTARTS AGE
grafana-7647cf9c74-864vk 1/1 Running 0 6m42s
istio-egressgateway-7764d599cb-s66zt 1/1 Running 0 6m43s
istio-ingressgateway-56cf5fd57c-smfc7 1/1 Running 0 6m43s
istio-tracing-7fcc6f5848-8tfxl 1/1 Running 0 6m42s
istiod-7567dbfd7b-c7pgz 1/1 Running 0 9m28s
kiali-7f575d9c4c-jd2fx 1/1 Running 0 6m42s
prometheus-6c7bcc84bc-l279c 2/2 Running 0 6m42s
[root@master istio]# kubectl get namespace -L istio-injection
NAME STATUS AGE ISTIO-INJECTION
default Active 24h
ingress-nginx Active 23h
istio-system Active 9m43s disabled
k8s-demo Active 24h
kube-node-lease Active 24h
kube-public Active 24h
kube-system Active 24h
3.k8s-app改造成k8s-istio-app,做一个istio流量切换小例子
3.1 代码新增接口方便查询k8s集群中istio的/app/info接口
这样写是由于k8s的ingress gateway我们配置的直接走的k8s的service,所以istio得流量切换这样调用/app/info不起作用,写成feign调用配置为istio配置可以看到切换流量的效果。若想看差异,也可以将此地址配置为k8s的svc地址。例如:http://k8s-istio-app.k8s-istio-demo.svc:80
此接口通过feign查询集群中/app/info接口,通过istio(若想通过k8s的svc也可切换地址,很方便)
此地址配置为istio:
http://istio-ingressgateway.istio-system.svc:8080
3.2 新建命名空间
[root@master ~]# kc create ns k8s-istio-demo
namespace/k8s-istio-demo created