前言

上一章安装了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 

 

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐