文章目录
引言
本篇对标Istio官方安装文档,只是使用kind
和kt-connect
工具使环境验证更简单。
安装Docker
参考官网(推荐用
DockerDesktop
):https://docs.docker.com/get-docker/
安装Kubernetes
我选kind
:方便单机模拟多集群多node场景。
mac安装kind和创建集群
brew install kind
kind create cluster
因还验证higress,因此用现有的higress集群,配置如下:
cat <<EOF | kind create cluster --config - --kubeconfig $HOME/.kube/config
# https://kind.sigs.k8s.io/docs/user/quick-start/
# https://kind.sigs.k8s.io/docs/user/configuration
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
name: higress
nodes:
- role: control-plane
kubeadmConfigPatches:
- |
kind: InitConfiguration
nodeRegistration:
kubeletExtraArgs:
node-labels: "ingress-ready=true"
extraPortMappings:
- containerPort: 80
hostPort: 80
protocol: TCP
- containerPort: 443
hostPort: 443
protocol: TCP
EOF
集群信息如下:
本地联通k8s集群网络
安装kt-connect:实现本地服务直接访问Kubernetes集群内网(包括Pod IP和Service域名
brew install kt-connect
sudo ktctl connect # 需要root权限
安装istio
- 安装istio:https://istio.io/latest/docs/setup/getting-started/
- 安装istioctl:https://istio.io/latest/docs/setup/install/istioctl/
工作目录需在
/xxx/istio-1.20.3
,整体过程和官网一致,因此把相关命令放在一起
curl -L https://istio.io/downloadIstio | sh -
# 省略istioctl生效的步骤
source <(istioctl completion zsh)
istioctl install --set profile=demo -y
# 为默认空间设置自动注入Sidecar
kubectl label namespace default istio-injection=enabled
# 禁用自动注入Sidecar
# kubectl label namespace default istio-injection=enabled
# 安装插件
kubectl apply -f samples/addons
# 安装bookinfo
kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
# 查看安装结果
kubectl -n istio-system get deploy,po,svc -o wide
kubectl get deploy,po,svc -o wide
istio-system
命名空间安装后结果:有istio核心组件和插件
default
命名空间安装后结果:bookinfo信息
访问productpage(ServiceIP+Port)结果:http://10.96.110.154:9080/productpage
配置域名访问各插件
- gateway:http://gateway.istio.cn/productpage
- kiali:http://kiali.istio.cn:20001
- jaeger:http://jaeger.istio.cn
- prometheus:http://prom.istio.cn:9090
- grafana:http://grafana.istio.cn:3000
/etc/hosts
配置如下信息:
网关访问
Bookinfo新增Gateway和VirtualService
Bookinfo 已成功部署,但无法从网关访问。
将Bookinfo与 Istio 网关关联
kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml
创建资源对象如下:
网关访问成功
访问kiali
访问jaeger
访问grafana
loki收集日志
安装loki客户端
Istio的loki插件只安装了服务端,因此无法查看容器日志。
因此还需安装客户端上报日志,官方推荐promtail
(还调通了fluent-bit
),采用helm
和grafana/loki-stack
安装。
helm repo add grafana https://grafana.github.io/helm-charts
helm repo update
cat <<EOF | helm upgrade --install loki grafana/loki-stack --values -
loki:
enabled: false
promtail:
enabled: true
podAnnotations:
sidecar.istio.io/inject: "false" # 禁用SideCar注入
fluent-bit:
enabled: false
loki:
serviceName: loki
podAnnotations:
sidecar.istio.io/inject: "false" # 禁用SideCar注入
grafana:
enabled: false
filebeat:
enabled: false
logstash:
enabled: false
EOF
有一个promtail Pod了(因为只有一台机器,采用DaemonSet
调度器)
更新loki数据源地址
因grafana在istio-system
,而loki Service 位于default
,因此内置的http://loki:3100
需改为http://loki.default:3100
默认数据源存在下面两个问题:
- 问题1:默认数据源提示
Failed to call resource
- 问题2:找不到labels(无日志数据),实际同问题1
验证loki结果
可查到labels
productpage只有metrics请求日志
现多次访问:http://gateway.istio.cn/productpage
多了很多非metrics日志(如:GET /reviews/0
)
卸载istio
kubectl delete -f samples/addons
istioctl uninstall -y --purge
kubectl delete namespace istio-system
kubectl delete -f samples/bookinfo/platform/kube/bookinfo.yaml
kubectl label namespace default istio-injection-
结语
本文基于官方安装文档和最新版(1.20.2)部署了完整的Istio环境。
请用微信扫码关注下🙏 ,持续更新云原生DevOps最佳实践。