1、设置服务器本机代理,要不有可能无法访问到github等地址,导致程序包下载失败(非必要)
vim set-proxy.sh
export HTTPS_PROXY=http://192.168.31.215:7890 #我本地的代理地址
export NO_PROXY="127.0.0.1/8,192.168.100.0/24,*.haoge.com,.cluster.local,.svc.cluster.local,10.100.0.0/16,10.200.0.0/16"
exec bash
开启代理:chmod +x set-proxy.sh && ./set-proxy.sh
2、本机开启代理,登录istio官网:https://istio.io/
3、找到Documentation–>Getting Started,然后根据官网步骤执行
1、cd /usr/local && curl -L https://istio.io/downloadIstio | sh -
2、ln -sv istio-1.17.1 istio
ln -sv /usr/local/istio/bin/istioctl /usr/local/bin/istioctl
4、使用istioctl命令部署
查看列表:istioctl profile list
部署测试环境: istioctl install –set profile=demo
5、部署完成后会在istio-system名称空间下创建istio等pod
kubectl get pods -n istio-system
再次执行 istioctl version ,可以看到控制平面和数据平面的版本信息
6、修改网关的外部地址,修改为nodePort模式
kubectl get svc -n istio-system #可以看到数据平面的 入口网关服务的类型为LoadBalancer
直接修改svc: kubectl edit svc -n istio-system istio-ingressgateway,type类型修改为NodePort
也可以使用Openelb 本地测试使用loadbalancer类型的svc,具体可参考网上文档
7、为指定需要注入istio代理的名称空间打标签
kubectl label namespace default istio-injection=enabled
查看名称空间是否打上标签: kubectl get ns –show-labels
8、启动一个测试容器
kubectl run client-$RANDOM –image=ikubernetes/admin-box:v1.2 –restart=Never -it –rm –command – /bin/bash
发现报错:
Error from server (InternalError): Internal error occurred: failed calling webhook "namespace.sidecar-injector.istio.io": failed to call webhook: Post "https://istiod.istio-system.svc:443/inject?timeout=10s": context deadline exceeded
解决方案:
在每个k8s-master节点修改kube-apiserver.service文件
vim /etc/systemd/system/kube-apiserver.service ,新增如下两行参数,第一行如果存在的话就只新增第二行
--enable-aggregator-routing=true \
--enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction \
9、部署istio的附件服务
cd /usr/local/istio/samples/addons && kubectl apply -f .
会部署grafana,jaeger(链路追踪),kiali(可视化),prometheus等服务,默认会部署到istio-system
10、通过Ingress Gateway开放各个服务,使用类似基于FQDN虚拟主机,统一通过Ingress gateway的外部地址进行访问,也可以使用NodePort方式访问
kubectl get crds 负责流量治理的crd服务
kubectl api-resources –api-group=networking.istio.io
可以看到有三个比较重要的资源
查看哪些服务注入了istio代理:istioctl proxy-status 或者简写为 istioctl ps
A、通过将kiali的svc模式改为NodePort模式的访问方式
kubectl edit svc -n istio-system kiali 将类型修改为NodePort模式,并配置nodePort端口等即可
B、使用ingressgateway方式给kiali配置访问域名
vim kiali-gateway.yaml 流量接入网关,配置访问域名
apiVersion: networking.istio.io/v1beta1
kind: Gateway
metadata:
name: kiali-gateway
namespace: istio-system
spec:
selector:
app: istio-ingressgateway
servers:
- port:
number: 80
name: http-kiali
protocol: HTTP
hosts:
- "kiali.haoge.com"
---
vim kiali-virtualservice.yaml 确认gateway与哪些服务关联
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
name: kiali-virtualservice
namespace: istio-system
spec:
hosts:
- "kiali.haoge.com"
gateways:
- kiali-gateway
http:
- match:
- uri:
prefix: /
route:
- destination:
host: kiali
port:
number: 20001
---
vim kiali-destinationrule.yaml
apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
name: kiali
namespace: istio-system
spec:
host: kiali
trafficPolicy:
tls:
mode: DISABLE
---
部署gateway、vs、destinationrule等资源
kubectl apply -f kiali-gateway.yaml
kubectl apply -f kiali-virtualservice.yaml
kubectl apply -f kiali-destinationrule.yaml
会看到会创建如下资源:
kubectl get gateway -n istio-system
NAME AGE
kiali-gateway 3m55s
kubectl get VirtualService -n istio-system
NAME GATEWAYS HOSTS AGE
kiali-virtualservice ["kiali-gateway"] ["kiali.haoge.com"] 3m18s
kubectl get DestinationRule -n istio-system
NAME HOST AGE
kiali kiali 4m40s
11、配置haproxy,使用一个虚拟IP负责调度三个node节点的31245端口
我这里使用了8080端口,因我部署haproxy的服务器80端口被占用了,默认最好使用80端口,虚拟IP为192.168.100.31
vim /etc/haproxy/haproxy.cfg 部分配置
...
listen k8s-istio-ingressgateway-8080
bind 192.168.100.31:8080
mode tcp
server master1 192.168.100.23:31245 check inter 3s fall 3 rise 1
server master2 192.168.100.24:31245 check inter 3s fall 3 rise 1
server master3 192.168.100.25:31245 check inter 3s fall 3 rise 1
12、本地配置host解析,浏览器打开kiali.haoge.com:8080 即可看到kiali页面
vim C:\Windows\System32\drivers\etc\hosts
...
192.168.100.31 kiali.haoge.com
13、部署bookinfo
cd /usr/local/istio/samples
kubectl apply -f bookinfo/platform/kube/bookinfo.yaml
istioctl ps
root@k8s-master1:~# istioctl ps
NAME CLUSTER CDS LDS EDS RDS ECDS ISTIOD VERSION
details-v1-698b5d8c98-8qrxr.default Kubernetes SYNCED SYNCED SYNCED SYNCED NOT SENT istiod-c564cfff6-58t62 1.17.1
istio-egressgateway-89bcb88bb-rkgtq.istio-system Kubernetes SYNCED SYNCED SYNCED NOT SENT NOT SENT istiod-c564cfff6-58t62 1.17.1
istio-ingressgateway-75ffbf99d6-877lg.istio-system Kubernetes SYNCED SYNCED SYNCED SYNCED NOT SENT istiod-c564cfff6-58t62 1.17.1
productpage-v1-bf4b489d8-vvxhn.default Kubernetes SYNCED SYNCED SYNCED SYNCED NOT SENT istiod-c564cfff6-58t62 1.17.1
ratings-v1-5967f59c58-ptw4p.default Kubernetes SYNCED SYNCED SYNCED SYNCED NOT SENT istiod-c564cfff6-58t62 1.17.1
reviews-v1-9c6bb6658-hf4jt.default Kubernetes SYNCED SYNCED SYNCED SYNCED NOT SENT istiod-c564cfff6-58t62 1.17.1
reviews-v2-8454bb78d8-tl7bt.default Kubernetes SYNCED SYNCED SYNCED SYNCED NOT SENT istiod-c564cfff6-58t62 1.17.1
reviews-v3-6dc9897554-5mgh4.default Kubernetes SYNCED SYNCED SYNCED SYNCED NOT SENT istiod-c564cfff6-58t62 1.17.1
sleep-75bbc86479-dsd9b.default Kubernetes SYNCED SYNCED SYNCED SYNCED NOT SENT istiod-c564cfff6-58t62 1.17.1
可以部署客户端验证服务
kubectl apply -f sleep/sleep.yaml
此时可以进入容器客户端进行访问
kubectl exec -it sleep-75bbc86479-dsd9b -- sh
curl 192.168.100.31:8080/productpage
14、需要外部访问bookinfo页面,执行如下命令
kubectl apply -f bookinfo/networking/bookinfo-gateway.yaml
浏览器访问: http://192.168.100.31:8080/productpage 即可访问bookinfo页面
此时不停刷新浏览器访问的productpage页面,在观测kiali的页面,即可看到访问流程图信息
15、部署destination-rule,控制访问流量到指定版本
kubectl apply -f bookinfo/networking/destination-rule-reviews.yaml
此时,如果想把所有的访问流量都发送至v1版本,执行如下命令即可
kubectl apply -f bookinfo/networking/virtual-service-all-v1.yaml
此时浏览器访问后,每次刷新的版本即都是v1了
如果登录了jason用户,就定位到v2版本,否则默认就是v1版本
kubectl apply -f bookinfo/networking/virtual-service-reviews-test-v2.yaml
16、拆除Istio服务
cd /usr/local/istio/samples/
#拆除附件
kubectl delete -f addons
# 拆除bookinfo相关资源
kubectl delete -f bookinfo/networking/virtual-service-reviews-test-v2.yaml
kubectl delete -f bookinfo/networking/destination-rule-reviews.yaml
kubectl delete -f bookinfo/networking/bookinfo-gateway.yaml
kubectl delete -f sleep/sleep.yaml
kubectl delete -f bookinfo/platform/kube/bookinfo.yaml
# 卸载istio服务
istioctl uninstall -y --purge
kubectl delete namespace istio-system
kubectl label namespace default istio-injection-
最后编辑:于浩 更新时间:2024-05-20 16:57