找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

1042

积分

0

好友

152

主题
发表于 5 天前 | 查看: 11| 回复: 0

图片

Istio 的安装主要有两种方式:使用 istioctl 命令行工具或 Helm Charts。在企业内网环境中,由于网络策略限制往往无法直接连接互联网下载 Docker 镜像,因此离线安装成为必需的部署方案。

本文将以 Istio 1.23.3 版本为例,详细讲解如何在内网环境中完成完整的离线部署流程。

离线安装原理

通常情况下,直接执行 istioctl install 命令会从 Docker Hub 拉取镜像完成默认配置的安装。若需定制化,则可使用 istioctl install -f istio-operator.yaml -y 命令,其中 istio-operator.yaml 是自定义的 IstioOperator 资源文件。

离线安装的核心在于,通过 IstioOperator 配置文件指定内网私有镜像仓库的地址,从而引导 istioctl 从内部源而非公网拉取镜像。

我们可以创建如下的 istio-operator.yaml 文件作为示例:

apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
  hub: harbor.mycompany.com/istio # 指定内网 Harbor 的 Istio 镜像仓库
  tag: 1.23.3 # 指定 Istio 版本,需与 istioctl 版本一致
  profile: default # 使用默认安装配置

配置完成后,执行 istioctl install -f istio-operator.yaml -y 命令时,安装程序便会尝试从 harbor.mycompany.com/istio 拉取所需镜像。

准备离线镜像

在执行安装命令前,必须确保内网镜像仓库(如 Harbor)中已同步 Istio 1.23.3 版本所需的所有镜像。若尚未准备,则需先在可联网的机器上下载镜像,再推送至内网仓库。

1. 获取所需镜像列表

首先,需要明确当前版本 Profile 所需的全部镜像。通过生成 manifest 文件并从中提取镜像地址即可实现。

步骤一:生成 manifest 文件

./bin/istioctl manifest generate --set profile=default > istio.yaml

步骤二:提取镜像地址

使用以下脚本从生成的 manifest 文件中提取所有唯一的镜像地址:

cat istio.yaml \
  | grep image: \
  | awk '{print $2}' \
  | sed 's/"//g' \
  | sort -u > images.txt

执行后,images.txt 文件内容示例如下:

busybox:1.28
docker.io/istio/pilot:1.23.3
docker.io/istio/proxyv2:1.23.3

接下来,需要将这三个镜像上传至内网 Harbor,目标路径示例:

harbor.mycompany.com/istio/busybox:1.28
harbor.mycompany.com/istio/pilot:1.23.3
harbor.mycompany.com/istio/proxyv2:1.23.3

2. 同步镜像到内网仓库

我们可以编写一个简单的脚本,批量完成镜像的拉取、重打标签和推送操作。这对于内网环境的持续集成与部署流程构建至关重要。

#!/bin/bash
HARBOR=harbor.mycompany.com/istio
while read img; do
    echo "Pulling amd64: $img"
    docker pull --platform=linux/amd64 $img  # 注意:Mac M1 等ARM架构机器需指定下载 amd64 架构镜像
    name=$(echo $img | awk -F/ '{print $NF}')
    target="$HARBOR/$name"
    echo "Tagging $img => $target"
    docker tag $img $target
    echo "Pushing => $target"
    docker push $target
done < images.txt

3. 执行安装

所有Docker镜像准备就绪后,即可回到内网环境执行安装命令:

./bin/istioctl install -f istio-operator.yaml -y

其他高级配置

开启 DNS 代理

在实际生产环境中,经常需要将网格外的服务(如数据库、第三方API)导入服务网格。为了更灵活地管理这些外部服务,建议开启 Istio 的 DNS 代理功能。

开启此功能后,对于仅有 IP 地址的外部服务,在通过 ServiceEntry 资源导入时可以为其自定义域名,从而允许网格内的应用像访问内部服务一样通过服务名进行调用。

可通过以下配置开启 DNS 代理:

apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
  meshConfig:
    defaultConfig:
      proxyMetadata:
        # 开启基本的 DNS 代理
        ISTIO_META_DNS_CAPTURE: "true"
        # 开启自动地址分配(可选)
        ISTIO_META_DNS_AUTO_ALLOCATE: "true"

完整配置示例

为了便于管理,可以将离线仓库配置与运行时功能配置整合在同一个 IstioOperator 资源文件中:


apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
  hub: harbor.mycompany.com/istio # 内网 Harbor 的 Istio 镜像仓库
  tag: 1.23.3 # Istio 版本
  profile: default # 安装 default profile
  meshConfig:
    defaultConfig:
      proxyMetadata:
        # 开启 DNS 代理
        ISTIO_META_DNS_CAPTURE: "true"
        # 开启自动地址分配,可选
        ISTIO_META_DNS_AUTO_ALLOCATE: "true"



上一篇:Vue首屏优化深度解析:基于Vue3与Webpack/Vite的实战性能提升方案
下一篇:LibreOffice开源办公套件深度解析:跨平台兼容与文档格式实战指南
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2025-12-17 14:52 , Processed in 0.107010 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2025 云栈社区.

快速回复 返回顶部 返回列表