istio1-安装istio
1、版本说明
- k8s 1.28.1
- istio 1.24.5
- k8s与istio的版本对应关系:https://istio.io/latest/docs/releases/supported-releases/
- istio github下载地址:https://github.com/istio/istio/releases/tag/1.24.5
2、安装istio
# 下载 Istio 1.18 安装包
tar zxf istio-1.24.5-linux-amd64.tar.gz
cp istio-1.24.5/bin/istioctl /usr/local/bin/
- demo 配置文件安装 Istio,无需任何 Gateway:
- --set hub=swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/istio指定国内镜像地址,避免镜像下载失败
istioctl install -f samples/bookinfo/demo-profile-no-gateways.yaml \
--set hub=swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/istio \
--set tag=1.24.3 -y
- 添加命名空间标签,指示 Istio 自动注入 Envoy 部署应用后面的侧车代理
kubectl label namespace default istio-injection=enabled
3、安装 Kubernetes Gateway API CRD
- 手动下载地址:https://github.com/kubernetes-sigs/gateway-api/releases/tag/v1.2.0
- 文件名:standard-install.yaml
- kubectl apply -f standard-install.yaml
![image]()
4、部署示例应用
# 下载bookinfo.yaml
wget https://raw.githubusercontent.com/istio/istio/release-1.24/samples/bookinfo/platform/kube/bookinfo.yaml
# 修改镜像源为国内地址
sed -i 's|docker\.io/istio|swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/istio|g' bookinfo.yaml > /dev/null 2>&1
# 部署应用
kubectl apply -f bookinfo.yaml
- 查看部署情况

- 查看应用运行情况。正常能看到页面标题

5、从外部访问应用
创建网关
# 创建一个网关
kubectl apply -f /root/istio-1.24.3/samples/bookinfo/gateway-api/bookinfo-gateway.yaml
# 通过对网关进行注释,将服务类型更改为:ClusterIP
# 注解是一个键值对,修改的注解是networking.istio.io/service-type=ClusterIP
kubectl annotate gateway bookinfo-gateway networking.istio.io/service-type=ClusterIP --namespace=default
# 查看网关状态(PROGRAMMED为True)
kubectl get gateway

访问应用程序
- 将k8s集群中 bookinfo-gateway-istio 这个 Service 的 80 端口,转发到 192.168.40.11 的 8088 端口
# 关键:address 192.168.40.11
nohup kubectl port-forward --address 192.168.40.11 svc/bookinfo-gateway-istio 8088:80 > /dev/null 2>&1 &
- 多次访问应用 http://192.168.40.11:8088/productpage 会看到页面不断变化

6、查看仪表盘
替换镜像
- cd /root/istio-1.24.3/samples/addons,替换镜像
sed -i 's#apache/skywalking-oap-server:9.7.0#swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/apache/skywalking-oap-server:9.7.0#' ./extras/skywalking.yaml > /dev/null 2>&1
sed -i 's#apache/skywalking-ui:9.1.0#swr.cn-north-4.myhuaweicloud.com/ddn-k8s/skywalking.docker.scarf.sh/apache/skywalking-ui:9.1.0#' ./extras/skywalking.yaml > /dev/null 2>&1
sed -i 's#openzipkin/zipkin-slim:3.4.0#swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/openzipkin/zipkin-slim:3.4.0#' ./extras/zipkin.yaml > /dev/null 2>&1
sed -i 's#docker\.io/grafana/grafana:11.2.2-security-01#swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/grafana/grafana:11.2.2-security-01#' grafana.yaml > /dev/null 2>&1
sed -i 's#docker\.io/jaegertracing/all-in-one:1.58#swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/jaegertracing/all-in-one:1.58#' jaeger.yaml > /dev/null 2>&1
sed -i 's#quay\.io/kiali/kiali:v2.0.0#swr.cn-north-4.myhuaweicloud.com/ddn-k8s/quay.io/kiali/kiali:v2.0.0#' kiali.yaml > /dev/null 2>&1
sed -i 's#kiwigrid/k8s-sidecar:1.27.5#swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/kiwigrid/k8s-sidecar:1.27.5#' loki.yaml > /dev/null 2>&1
sed -i 's#docker\.io/grafana/loki:3.2.0#swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/grafana/loki:3.2.0#' loki.yaml > /dev/null 2>&1
sed -i 's#ghcr\.io/prometheus-operator/prometheus-config-reloader:v0.76.0#swr.cn-north-4.myhuaweicloud.com/ddn-k8s/ghcr.io/prometheus-operator/prometheus-config-reloader:v0.76.0#' prometheus.yaml > /dev/null 2>&1
sed -i 's#prom/prometheus:v2.54.1#swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/prom/prometheus:v2.54.1#' prometheus.yaml > /dev/null 2>&1
安装storageclass
- 例子中的loki开启了持久化,需要持久卷pv。storageclass检测到pvc后会自动创建pv
- 例子中loki默认需要10G的PV。需要df -Th先确定服务器剩余容量是否足够
- 注意: 生产环境storageclass正确的安装顺序
- 安装k8s
- 安装storageclass (kubeadm不会安装storageclass)
- 安装监控组件
- 验证pvc绑定
-- 下载yaml文件
wget https://raw.githubusercontent.com/rancher/local-path-provisioner/master/deploy/local-path-storage.yaml
-- 修改为国内镜像地址
sed -i 's#rancher/local-path-provisioner:v0.0.34#swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/rancher/local-path-provisioner:v0.0.34#' local-path-storage.yaml > /dev/null 2>&1
-- 修改默认的存储类是loal-path(可选?)
kubectl patch storageclass local-path -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
-- 部署
kubectl apply -f local-path-storage.yaml
查看仪表盘
- 配置端口转发,将svc/kiali的20001端口转发至192.168.40.11:20001
nohup kubectl port-forward --address 192.168.40.11 svc/kiali 20001:20001 -n istio-system > /dev/null 2>&1 &
- 查看仪表盘


安装 Kubernetes Gateway API CRD(旧)
- 从 Kubernetes 1.25+ 开始,Kube-API Server 引入了对 CRD 校验规则的复杂度限制
- 一些包含复杂 x-kubernetes-validations.rule 的 CRD 会被拒绝创建,提示 "estimated rule cost exceeds budget"。
git clone https://github.com/kubernetes-sigs/gateway-api.git
cd gateway-api/config/crd
-
将较复杂的rule规则删掉,可以顺利执行kubectl apply
![image]()
-
在 gateway-api/config/crd 目录下的 experimental/ 和 standard/ 目录是用来区分 Gateway API 的两个稳定级别 的 CRD(CustomResourceDefinition)文件:
- standard/ 目录包含 稳定版的 Gateway API 资源定义。默认推荐生产环境安装。
- experimental/ 目录包含 实验性 的 Gateway API 资源定义。

卸载istio(旧)
istioctl uninstall --purge -y
# 如果安装的多个版本的istio,可以指定版本卸载
istioctl uninstall --revision <your-revision> --purge
# 删除crd和ns,确保删除干净
kubectl delete crds -l istio.io/rev
kubectl delete namespace istio-system



浙公网安备 33010602011771号