首页 > 其他分享 >Isito1.16.1配置部署

Isito1.16.1配置部署

时间:2023-01-17 15:12:43浏览次数:62  
标签:Isito1.16 部署 配置 istio manifests default 镜像 docker

此文档编写日期:2023-01-17

istio客户端和服务端版本:1.16.1(截止文档编写日期的最新版本)

istio部署方式:官方客户端istioctl部署,非helm部署,部署方式介绍可以参考官方安装介绍

一:下载安装istio客户端istioctl

参考链接:官方下载地址及文档

curl -L https://istio.io/downloadIstio | sh -

此命令会根据你的系统自动去github的releases下载对应你系统的客户端版本并解压,解压后会删除原tar包。所以得到的成品就是一个istio-1.16.1目录。

我是使用Mac 进行客户端安装和部署,因为有测试预发布正式三个环境,为了避免每个环境都安装istio客户端,所以使用Mac客户端进行统一管理。

image-20230116114904697

下载完成后将istio-1.16.1/bin/istioctl二进制文件移至PATH路径下。

二:配置文件编辑

istio目录中有3个目录需要关注:

bin/目录下对应istio客户端二进制文件。

manifests/目录对应istio安装的实际配置文件。

samples/目录下是官方提供的示例应用程序配置文件,istio安装完成后,可以使用通过kubectl apply -f 将示例应用程序安装至k8s集群,然后配合官方示例程序(任务)文档进行操作以便理解。

image-20230116124842523

istio官方默认提供了9种配置档,可以通过istioctl profile list 进行查看。

image-20230116130435686

注:由于作者有3个环境,所以针对每个环境的istioctl进行了命令alias设置,本文档中ict均代表istioctl,上图中ict profile list实际命令为istioctl profile list,文档后续中均不赘述。

istio中和k8s一样,默认读取~/.kube/config配置文件和k8s apiserver进行连接,如果你的kubeconfig文件路径不一致,使用istioctl --kubeconfig kubeconfig路径或者istioctl -c kubeconfig路径 进行指定,例如作者就是使用alias ict="istioctl --kubeconfig ~/.kube/config-test"进行环境区分。

上述9种配置档中,例如demo配置档可用于测试环境学习,default默认用于正式环境。本文档选择default配置档进行配置更改及安装。其他配置档雷同。

1:修改istio镜像地址为私有镜像地址。

配置档yaml文件在manifests/profiles/下,查看manifests/profiles/default.yaml中默认镜像下载地址。

image-20230116135840020

默认镜像下载地址为docker.io,使用跳板机将以下镜像下载到本地,从新构建将时区设置为东八区上海时区,默认为UTC时间。

- istio核心官方镜像下载

docker pull docker.io/istio/install-cni:1.16.1

docker pull docker.io/istio/operator:1.16.1

docker pull docker.io/istio/pilot:1.16.1

docker pull docker.io/istio/proxyv2:1.16.1

- 编写DockerFile

目录文件如下:

需要将宿主机中上海时区文件复制至DockerFile目录中:cp /usr/share/zoneinfo/Asia/Shanghai ./

image-20230117132221001

DockerFile内容如下:

image-20230117132501495

通过docker build -f pilot -t 私有镜像地址/pilot:1.16.1 .构建镜像,然后通过docker push 私有镜像地址/pilot:1.16.1上传镜像到私有镜像仓库。

其中operator和pilot的dockerfile中需注意,要先设置USER为root权限才能进行时区文件更改,时区更改完成后需要将USER设置为1337:1337。官方默认使用1337:1337用户执行命令,可以通过harbor构建历史查看。

image-20230116145238303

- 修改istio配置文件镜像地址

找到你安装的配置档文件,我安装的default档,配置档文件为manifests/profiles/default.yaml,只需在spec.values.global下添加:hub: 私有镜像地址前缀即可,注意是镜像地址前缀。

image-20230117132710322

2:修改日志格式

默认日志格式参考官方文档

使用istio后,所有流量都会由Sidecar(istio-proxy)容器代理,所以istio-ingressgateway和istio-proxy的日志尤为重要,default配置档默认没有开启日志输出,demo配置档默认开启,可以通过kubectl logs 查看日志,当然也可以以挂载的方式将日志输入至其他地方,默认istio-ingressgateway和istio-proxy日志输出如下:

image-20230117135141479

- 修改istio-ingressgateway和istio-proxy日志格式

修改对应配置档的yaml文件,我安装的default档,配置档文件为manifests/profiles/default.yaml,在spec.meshConfig下添加如下内容,这里是参考腾讯云istio的日志输出格式。

    accessLogFile: /dev/stdout
    accessLogEncoding: JSON
    accessLogFormat: '
           "authority": "%REQ(:AUTHORITY)%",
           "bytes_received": "%BYTES_RECEIVED%",
           "bytes_sent": "%BYTES_SENT%",
           "downstream_local_address": "%DOWNSTREAM_LOCAL_ADDRESS%",
           "downstream_remote_address": "%DOWNSTREAM_REMOTE_ADDRESS%",
           "duration": "%DURATION%",
           "istio_policy_status": "%DYNAMIC_METADATA(istio.mixer:status)%",
           "method": "%REQ(:METHOD)%",
           "path": "%REQ(X-ENVOY-ORIGINAL-PATH?:PATH)%",
           "protocol": "%PROTOCOL%",
           "request_id": "%REQ(X-REQUEST-ID)%",
           "requested_server_name": "%REQUESTED_SERVER_NAME%",
           "response_code": "%RESPONSE_CODE%",
           "response_flags": "%RESPONSE_FLAGS%",
           "route_name": "%ROUTE_NAME%",
           "start_time": "%START_TIME%",
           "upstream_cluster": "%UPSTREAM_CLUSTER%",
           "upstream_host": "%UPSTREAM_HOST%",
           "upstream_local_address": "%UPSTREAM_LOCAL_ADDRESS%",
           "upstream_service_time": "%RESP(X-ENVOY-UPSTREAM-SERVICE-TIME)%",
           "upstream_transport_failure_reason": "%UPSTREAM_TRANSPORT_FAILURE_REASON%",
           "user_agent": "%REQ(USER-AGENT)%",
           "x_forwarded_for": "%REQ(X-FORWARDED-FOR)%"'

image-20230117140447813

修改后的istio-ingressgateway和istio-proxy日志输出如下:

image-20230117140901361

3:istioingress Service相关

- Service类型选择

istioingress默认Service类型为LoadBalancer,但是大部分内网测试环境没有LoadBalancer,使用NodePort方式进行访问,需要将Service更改为NodePort类型。否则Service EXTERNAL-IP 字段将为Pending,虽然通过NodePort也可以访问,如下图

image-20230117141441376

修改对应配置档的yaml文件,我安装的default档,配置档文件为manifests/profiles/default.yaml,将spec.values.gateways.istio-ingressgateway.type修改为NodePort即可。

- 获取访问者源地址

默认设置是无法获取访问者源地址的,但是很多实际情况下,我们都会希望获取到访问者的源地址以便分析,设置对应配置档中istio-ingressgateway的service中externalTrafficPolicy为Local即可。即添加spec.values.gateways.istio-ingressgateway.externalTrafficPolicy为Local。

需要注意的是,设置为Local后,外部流量只能通过istio-ingressgateway Pod所在Node节点进入,无法从其他Node节点进入,也就是说,如果istio-ingressgateway Deployment 副本只有一个,将无法实现负载均衡,建议Pod数量大于2个并设置亲和性,避免2个副本同时落在同一Node上。

上述Service设置图如下:

image-20230117143051530

三:部署

- 安装

ict install --manifests=manifests/

需要指定manifests目录路径,如果不指定,将使用默认配置。如果需要指定demo配置档,添加 --set profile=demo即可。

image-20230117143801205

- 自动注入 Envoy 边车代理

选择你需要自动注入边车代理的命名空间,例如我需要给default命名空间注入,输入以下命令即可:

kubectl label namespace default istio-injection=enabled

注:命令空间已存在的Pod不会自动注入,新增Pod才会注入,如果需要给已存在Pod自动注入,Delete Pod 重建即可。

- 资源查看

istio默认安装在istio-system命名空间中

image-20230117143941704

- 配置更新

如果更改了manifests/目录中的文件,需要更新,例如将Service类型更改为LoadBalancer,通过以下命令即可更新。

ict upgrade --manifests=manifests/

- 卸载

如果你需要完全卸载istio,输入以下命令即可完全卸载,卸载完成后,会保留istio-system命名空间,已注入边车代理的Pod销毁后重建即可。

ict uninstall --purge

建议多查看官方文档,官方文档已支持中文。

标签:Isito1.16,部署,配置,istio,manifests,default,镜像,docker
From: https://www.cnblogs.com/big-cousin/p/17057848.html

相关文章

  • Linux部署Java项目【reggie_take_out】
    方式1:手工命令https://www.bilibili.com/video/BV13a411q753/?p=139方式2:shell脚本自动https://www.bilibili.com/video/BV13a411q753/?p=140https://www.bilibili.com......
  • 部署prysm mainnet
    部署prysm下载prysmmkdir-pv/data/prysm&&cd/data/prysmcurlhttps://raw.githubusercontent.com/prysmaticlabs/prysm/master/prysm.sh--outputprysm.sh&&chm......
  • (转发)Nginx Windows详细安装部署教程
    原文:NginxWindows详细安装部署教程-taiyonghai-博客园(cnblogs.com) 一、Nginx简介Nginx(enginex)是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMT......
  • Docker 部署 Grafana
    请参考 Docker部署Prometheus 参考准备工作1.下载镜像dockerpullgrafana/grafana2.部署1.准备相关映射目录mkdir-p/mnt/docker/grafana/storagemkdir......
  • 生成树原理及配置
    STP协议介绍STP(SpanningTreeProtocol)是运行在交换机上的二层破环协议,环路会导致广播风暴、MAC地址表震荡等后果,STP的主要目的就是确保在网络中存在冗余路径时,不会产生环......
  • 振弦采集模块配置工具VMTool通用串口调试模块
    振弦采集模块配置工具VMTool通用串口调试模块VMTool扩展功能双击主界面右侧扩展工具条可实现扩展功能区的显示与隐藏切换。扩展功能包括串口调试、MODBUS、实时曲线及数......
  • 【Dubbo3 终极特性】「云原生三中心架构」带你探索 Dubbo3 体系下的配置中心和元数据
    承接上文通过之前的【Dubbo3终极特性】「云原生三中心架构」带你探索Dubbo3体系下的配置中心和元数据中心、注册中心的原理及开发实战(上),让我们对Dubbo3的三中心架构体系......
  • 【Dubbo3 终极特性】「云原生三中心架构」带你探索 Dubbo3 体系下的配置中心和元数据
    承接上文通过之前的【Dubbo3终极特性】「云原生三中心架构」带你探索Dubbo3体系下的配置中心和元数据中心、注册中心的原理及开发实战(上),让我们对Dubbo3的三中心架构体系有......
  • Maven配置多仓库
    出于安全的考虑,maven默认是不会去使用snapshot包的,所以,如果你有需要使用snapshot包(很多公司可能大量使用),那么你就需要配置SNAPSHOT为允许了<repository>......
  • JVM DNS 缓存配置(转)
    原文:https://www.jianshu.com/p/048e8bd3ea46作者:EricAlpha域名解析并非一个简单的过程,其解析结果可能会被层层缓存,如浏览器DNS缓存、操作系统DNS缓存、ISP的DNS......