macOS istio bookinfo示例搭建
上一章安装了k8s,安装dashboard,实际上容器的应用才刚刚开始,容器由于灵活度,网络和管理难度大大增加,加上架构和业务分离(sidecar)的微服务架构。一般而言,分布式的粒度越细,管理越难,网络复杂度也大大增加,所以k8s就是专门管理容器的,但是流量负载却需要另外实现,比如istio。实际上这些都是demo性质的,关键还是管理和网络,比如sidecar可以自动注入和手动注入,可以使用eb
前言
上一章安装了k8s,安装dashboard,实际上容器的应用才刚刚开始,容器由于灵活度,网络和管理难度大大增加,加上架构和业务分离(sidecar)的微服务架构。一般而言,分布式的粒度越细,管理越难,网络复杂度也大大增加,所以k8s就是专门管理容器的,但是流量负载却需要另外实现,比如istio。
准备
istio官网实践,M1等ARM芯片的istio能安装,但是名称为istio-proxy的sidecar需要手动编译。
curl -L https://istio.io/downloadIstio | sh -
笔者下载的是1.14.1版本,截止目前最新是1.14.2
设置path,实际上也可以使用cd bin 和 ./运行,就是不知道k8s执行的yaml写了相对路径没有
cd istio-1.14.1
export PATH=$PWD/bin:$PATH
安装istio
安装示例很简单,istio的指令封装了,如果在k8s的服务器环境,是直接使用k8s的命令安装
istioctl install --set profile=demo -y
实际效果
然后开启自动注入sidecar,也可以手动注入,自动注入方便,istio部署容器,自动注入envoy。
kubectl label namespace default istio-injection=enabled
效果
安装示例
kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
实际上yaml文件存放于https://raw.githubusercontent.com/istio/istio/release-1.14/samples/bookinfo/platform/kube/bookinfo.yaml 这里面存放了容器的镜像名称,首次启动会拉取,笔者已经安装并卸载了,再次安装仅仅直接启动容器,因为本地缓存镜像,但是如果不卸载上次安装的容器就会报错
upstream connect error or disconnect/reset before headers.
卸载程序:
samples/bookinfo/platform/kube/cleanup.sh
重新安装结果
而且可以看到sidecar已经注入
因为每个pod有2个容器在运行
对外访问
因为容器本身是NAT网络,笔者前面的章有说到过(156条消息) 网络NAT、桥接与主机模式_fenglllle的博客-CSDN博客_nat 桥接网络
所以网络的能力需要开放端口对外访问,类似反向代理。
kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml
可以看到yaml文件:https://raw.githubusercontent.com/istio/istio/release-1.14/samples/bookinfo/networking/bookinfo-gateway.yaml 真网关😄
执行结果
查找端口情况
kubectl get svc istio-ingressgateway -n istio-system
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
istio-ingressgateway LoadBalancer 10.102.102.200 localhost 15021:31806/TCP,80:30821/TCP,443:30143/TCP,31400:30599/TCP,15443:32678/TCP 16m
找到访问的host和端口即可访问
export INGRESS_HOST=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].port}')
export SECURE_INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="https")].port}')export INGRESS_HOST=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')
访问http://$INGRESS_HOST:$INGRESS_PORT/productpage
仪表盘
Kiali 仪表板,可以直观的看到调用关系图
kubectl apply -f samples/addons
kubectl rollout status deployment/kiali -n istio-system
部署有点慢,需要耐心等待一段时间
启动dashboard,浏览器自动访问
istioctl dashboard kiali
多刷新几次上次访问的bookinfo页面访问
总结
实际上这些都是demo性质的,关键还是管理和网络,比如sidecar可以自动注入和手动注入,可以使用ebpf实现网络加速,还可以集成其他sidecar模式,(istio默认使用envoy,即proxyv2)。
k8s的dashboard可以清晰的看到一个pod的sidecar,如果是虚拟机部署,还是很难管理的,需要自建一套类似k8s的管理平台。
网络Merbridge
更多推荐
所有评论(0)