Istio:搭建Istio完整环境

引言

本篇对标Istio官方安装文档,只是使用kindkt-connect工具使环境验证更简单

官方安装文档:https://istio.io/latest/docs/setup/getting-started

安装Docker

参考官网(推荐用DockerDesktop):https://docs.docker.com/get-docker/

安装Kubernetes

主流Kubernetes测试环境部署工具有minikubek3dkind等。

我选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

工作目录需在/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

配置域名访问各插件

/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),采用helmgrafana/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最佳实践。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值