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
k8s集群安装v1.20.9后-2-改造部署自己的服务k8sApp,增加istio-LMLPHP
此接口通过feign查询集群中/app/info接口,通过istio(若想通过k8s的svc也可切换地址,很方便)
k8s集群安装v1.20.9后-2-改造部署自己的服务k8sApp,增加istio-LMLPHP
此地址配置为istio:
http://istio-ingressgateway.istio-system.svc:8080
k8s集群安装v1.20.9后-2-改造部署自己的服务k8sApp,增加istio-LMLPHP

3.2 新建命名空间

[root@master ~]# kc create ns k8s-istio-demo
namespace/k8s-istio-demo created

3.3 给此命名空间开启自动注入sidecar(istio)

09-27 07:58