istio1-安装istio

1、版本说明

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

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
  • 查看部署情况

image

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

image

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

image

访问应用程序

  • 将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 &

image

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 &
  • 查看仪表盘

image

image

安装 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 资源定义。

image

卸载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
posted @ 2026-03-27 11:23  立勋  阅读(47)  评论(0)    收藏  举报