备考ICA----Istio实验20---跨网络Primary-Remote主从架构部署

备考ICA----Istio实验20—跨网络Primary-Remote主从架构部署

按照本实验在 cluster1(主集群)上安装 Istio 控制平面,并将 cluster2(远程集群)配置为使用 cluster1 中的控制平面。群集 cluster1 在 network1 网络上,而 cluster2 在 network2 网络上。这意味着 Pod 之间没有跨越群集边界的直接连接。
在这里插入图片描述
在此配置中,cluster1 中的 Istiod 将监视两个集群中的 APIServer 的端点。通过这种方式,控制平面将能够为两个集群中的工作负载提供服务发现。跨集群边界的服务工作负载通过用于东西向流量的专用网关进行间接通信。每个群集中的网关必须可以从另一个群集中访问。
cluster2 中的服务将通过相同的 east-west gateway 到达集 cluster1 的控制平面。

1. 环境准备

确认2个集群存在
在这里插入图片描述
如果不存在,可以使用上个实验一样的命令进行创建

kind create cluster --name cluster1
kind create cluster --name cluster2

在这里插入图片描述

上下文,api,metallb和istioctl安装创建见上一个实验
具体见前一个实验的1-3节内容

2. 为集群创建Secret

在每个集群中,创建一个名为 cacerts Secret 包含所有输入文件 ca-cert.pem、ca-key.pem、root-cert.pem 和 cert-chain.pe

2.1 cluster1

切换上下文在cluster1中执行

cd certs/
kubectl --context $CTX_CLUSTER1 create namespace istio-system
kubectl --context $CTX_CLUSTER1 create secret generic cacerts -n istio-system \
  --from-file=cluster1/ca-cert.pem \
  --from-file=cluster1/ca-key.pem \
  --from-file=cluster1/root-cert.pem \
  --from-file=cluster1/cert-chain.pem

确认secrets被正确创建

kubectl --context $CTX_CLUSTER1 get secrets -n istio-system

2.2 cluster2

切换上下文在cluster2中执行

kubectl --context $CTX_CLUSTER2 create namespace istio-system
kubectl --context $CTX_CLUSTER2 create secret generic cacerts -n istio-system \
  --from-file=cluster2/ca-cert.pem \
  --from-file=cluster2/ca-key.pem \
  --from-file=cluster2/root-cert.pem \
  --from-file=cluster2/cert-chain.pem

确认secrets被正确创建

kubectl --context $CTX_CLUSTER2 get secrets -n istio-system

在这里插入图片描述

3. 为 cluster1配置primary控制平面

3.1 为cluster1设置默认网络

kubectl --context="${CTX_CLUSTER1}" \
  label namespace istio-system \
  topology.istio.io/network=network1

确认配置正确

kubectl --context $CTX_CLUSTER1 get ns istio-system --show-labels

在这里插入图片描述

3.2 istioctl安装文件

cluster1.yaml

apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
  values:
    global:
      meshID: mesh1
      multiCluster:
        clusterName: cluster1
      network: network1

3.3 安装istiod控制平面

cd
istioctl install --context $CTX_CLUSTER1 -f cluster1.yaml -y

在这里插入图片描述

3.4 cluster1上安装东西向网关

istio/samples/multicluster/gen-eastwest-gateway.sh --mesh mesh1 \
--cluster cluster1 --network network1 | \
istioctl --context="${CTX_CLUSTER1}" install -y -f -

确认服务正确创建

kubectl --context="${CTX_CLUSTER1}" get svc istio-eastwestgateway -n istio-system

在这里插入图片描述

3.5 放开cluster1中的服务

kubectl --context="${CTX_CLUSTER1}" apply -n istio-system \
   -f istio/samples/multicluster/expose-services.yaml

4. cluster2配置控制平面集群

4.1 为cluster2的命名空间打标签

为 istio-system 命名空间添加注解来识别应管理 cluster2 的外部控制平面集群

kubectl --context="${CTX_CLUSTER2}" annotate namespace istio-system \
topology.istio.io/controlPlaneClusters=cluster1

4.2 为cluster1设置默认网络

kubectl --context="${CTX_CLUSTER2}" \
  label namespace istio-system \
  topology.istio.io/network=network2

确认label正确

kubectl get ns istio-system --show-labels --context ${CTX_CLUSTER2}

在这里插入图片描述

4.3 将cluster2设为从集群

确认cluster1的istio-eastwestgateway的external-ip

kubectl get svc -n istio-system --context ${CTX_CLUSTER1} istio-eastwestgateway 

在这里插入图片描述
配置cluster2安装文件
cluster2.yaml

apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
  profile: remote
  values:
    istiodRemote:
      injectionPath: /inject/cluster/cluster2/net/network2
    global:
      remotePilotAddress: '172.18.0.221'

安装生效

istioctl install --context="${CTX_CLUSTER2}" -f cluster2.yaml -y

在这里插入图片描述
为了提供对 cluster2 的 API 服务器访问,我们生成一个远程机密并将其应用于 cluster1

istioctl create-remote-secret --context="${CTX_CLUSTER2}" --name=cluster2 | \
  kubectl apply -f - --context="${CTX_CLUSTER1}"

验证是否生成完成

kubectl get secrets --context ${CTX_CLUSTER1} -n istio-system

在这里插入图片描述

5. 配置cluster2网关

5.1 在cluster2上安装东西网关

cd istio
samples/multicluster/gen-eastwest-gateway.sh --mesh mesh1 \
--cluster cluster2 --network network2 | \
istioctl --context="${CTX_CLUSTER2}" install -y -f -

在这里插入图片描述

5.2 开放 cluster2 中的服务

kubectl --context="${CTX_CLUSTER1}" apply -n istio-system \
-f samples/multicluster/expose-services.yaml

6. 部署测试环境

环境部署脚本
test.sh

#!/bin/bash
VERSION=$(ls ~ | grep istio)
export CTX_CLUSTER1=kind-cluster1
export CTX_CLUSTER2=kind-cluster2
############ Create ns sample in cluster1 cluster2 ############
kubectl create --context="${CTX_CLUSTER1}" namespace sample
kubectl create --context="${CTX_CLUSTER2}" namespace sample

############ Label ns sample istio-injection=enabled ############
kubectl label --context="${CTX_CLUSTER1}" namespace sample istio-injection=enabled
kubectl label --context="${CTX_CLUSTER2}" namespace sample istio-injection=enabled

############ deploy helloword in cluster1 cluster2 ############
cd ~/istio
kubectl apply --context="${CTX_CLUSTER1}" -f samples/helloworld/helloworld.yaml -l service=helloworld -n sample
kubectl apply --context="${CTX_CLUSTER2}" -f samples/helloworld/helloworld.yaml -l service=helloworld -n sample

############ deploy helloword V1 in cluster1 ############
kubectl apply --context="${CTX_CLUSTER1}" -f samples/helloworld/helloworld.yaml -l version=v1 -n sample
kubectl get pod --context="${CTX_CLUSTER1}" -n sample -l app=helloworld

############ deploy helloword V2 in cluster2 ############
kubectl apply --context="${CTX_CLUSTER2}" -f samples/helloworld/helloworld.yaml -l version=v2 -n sample
kubectl get pod --context="${CTX_CLUSTER2}" -n sample -l app=helloworld

############ deploy sleep in cluster1 cluster2 ############
kubectl apply --context="${CTX_CLUSTER1}" -f samples/sleep/sleep.yaml -n sample
kubectl apply --context="${CTX_CLUSTER2}" -f samples/sleep/sleep.yaml -n sample
kubectl get pod --context="${CTX_CLUSTER1}" -n sample -l app=sleep
kubectl get pod --context="${CTX_CLUSTER2}" -n sample -l app=sleep

部署

chmod +x test.sh 
./test.sh 

在这里插入图片描述

7. 测试

和上个实验一样
通过cluster1的sleep访问sample名称空间中的helloworld,理论上只应该返回v1的版本,但由于打通了cluster2,所以有一部分流量被分发到了cluster2上,由v2进行响应

for x in {1..10};do kubectl exec --context="${CTX_CLUSTER1}" \
-n sample deploy/sleep -- curl -s helloworld.sample:5000/hello;done

同理cluster2上的sleep也一样

for x in {1..10};do kubectl exec --context="${CTX_CLUSTER2}" \
-n sample deploy/sleep -- curl -s helloworld.sample:5000/hello;done

在这里插入图片描述
上一个实验是在2个集群上都安装了istiod,而本实验只在cluster1上搭建了istiod通过打通东西向gateway实现集群的互通
至此备考ICA----Istio实验20—跨网络Primary-Remote主从架构部署完成

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/535955.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于Springboot的笔记记录分享网站(有报告)。Javaee项目,springboot项目。

演示视频: 基于Springboot的笔记记录分享网站(有报告)。Javaee项目,springboot项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构…

提升法律文书起草效率:AlphaGPT 助力律师快速生成诉讼和仲裁文件

法律文书起草对于法律专业人士而言是一项基础而关键的任务。无论是民事、刑事还是行政诉讼,以及仲裁案件,精确的法律文书撰写对于案件的成功至关重要。然而,这一过程往往既耗时又复杂,尤其是在处理复杂的案情和面对当事人难以理解…

浅谈网络安全威胁与防御策略

企业网络安全威胁概述 外部威胁:来自网络安全威胁,比如DDOS攻击,病毒,sql注入,木马,蠕虫,等网络入侵,网络扫描,垃圾邮件,钓鱼邮件,针对web的攻击…

Docker Redis Debian服务器版

1.使用官方安装脚本自动安装docker 安装命令如下: curl -fsSL https://get.docker.com -o get-docker.shsudo sh get-docker.sh 如果安装提示 -bash sudo command not found 则需要 #update sudo apt-get update sudo apt-get install sudo再执行安装脚本1 安装…

WS2812B彩灯

目录 1、介绍 2、参数 3、引脚功能 4、应用电路 5、Code 1、介绍 WS2812是一种智能控制LED灯源,集成了控制电路和RGB芯片在一个5050封装组件中。它的主要特点和技术规格如下: 集成设计:WS2812将控制电路和RGB芯片集成在同一个封装中&…

Redis(三) String字符串

文章目录 前言常见命令SETGETMSETMGETINCRINCRBYDECRDECRBYINCRBYFLOATAPPENDGETRANGESETRANGESTRLEN命令小结 前言 Redis 的数据有很多种数据类型,包括字符串类型、列表类型、哈希类型、集合类型、有序集合类型等。这几种数据类型是针对于 value 来说的&#xff0…

数据应用OneID:ID-Mapping Spark GraphX实现

前言 说明 以用户实体为例,ID 类型包含 user_id 和 device_id。当然还有其他类型id。不同id可以获取到的阶段、生命周期均不相同。 device_id 生命周期通常指的是一个设备从首次被识别到不再活跃的整个时间段。 user_id是用户登录之后系统分配的唯一标识&#xff…

ELK及ELFK排错

目录 一、ELK及ELFK排错思路 1.1filebeat侧排查 1.2logstash侧排查 1.3ES、kibana侧问题 一、ELK及ELFK排错思路 1.1filebeat侧排查 第一步:排查filebeat上的配置文件有没有写错,filebeat的配置文件是yml文件,一定要注意格式。 第二步…

Harmony鸿蒙南向驱动开发-HDMI接口使用

功能简介 HDMI(High Definition Multimedia Interface),即高清多媒体接口,主要用于DVD、机顶盒等音视频Source到TV、显示器等Sink设备的传输。 HDMI以主从方式工作,通常有一个Source端和一个Sink端。 HDMI接口定义了…

Harmony鸿蒙南向驱动开发-MIPI CSI接口使用

功能简介 CSI(Camera Serial Interface)是由MIPI联盟下Camera工作组指定的接口标准。CSI-2是MIPI CSI第二版,主要由应用层、协议层、物理层组成,最大支持4通道数据传输、单线传输速度高达1Gb/s。 物理层支持HS(High …

Flutter - 环境配置提示 cmdline-tools component is missing

问题: flutter doctor运行命令 flutter doctor 报错: Android toolchain - develop for Android devices (Android SDK version 30.0.2) ✗ cmdline-tools component is missing Run path/to/sdkmanager --install "cmdline-tools;lates…

NI-LabView的DAQ缺少或丢失的解决办法(亲测有效)

DAQmx在Labview中不显示或缺失 问题:在NI Packasge Manager安装完DAQ后在labview中不显示控件解决办法 问题:在NI Packasge Manager安装完DAQ后在labview中不显示控件 在打开测量I/O时,见不到 DAQmx,或者在Express中见不到DAQ助手…

《战神4》和《战神5》有什么联系吗 苹果电脑如何运行《战神4》苹果电脑玩战神 Mac玩游戏 战神5攻略 crossover激活码

《战神4》(God of War 2018)和《战神5》(God of War: Ragnark)是一对引人注目的游戏作品,它们不仅在游戏界引起了广泛的关注,也给玩家带来了深入探索北欧神话世界的机会。这两部游戏之间的联系不仅体现在剧…

Docker 安装 RocketMQ

目录 一、新建两个配置文件 1.1 创建docker-compose.yml文件 1.2 .新建broker.conf文件 二、运行 三、可视化界面 一、新建两个配置文件 1.1 创建docker-compose.yml文件 version: 3.5 services:rmqnamesrv:image: foxiswho/rocketmq:servercontainer_name: rmqnamesrvports…

集合系列(十九) -List与数组互转操作介绍

一、数组转List 方式一 通过 Arrays.asList(strArray) 方式,将数组转换List,但不能对List增删,只能查改,否则抛异常,例子如下: public static void main(String[] args) {//创建一个字符串数组String[] …

MobX入门指南:快速上手状态管理库

一、什么是MobX MobX 是一个状态管理库,它可以让你轻松地管理应用程序的状态,并且可以扩展和维护。它使用观察者模式来自动传播你的状态的变化到你的 React 组件。 二、安装及配置 安装 MobX 和 MobX-React:你可以使用 npm 或 yarn 安装这…

ubuntu 应用程序设置 开机自启动

1. 通过.desktop方式 autostart 中.desktop 配置文件 1.1 用户级自启动 登录后才可以启动服务。 可视化配置:在ubuntu自带的可视化程序来配置,就是StartupApplications,它在启动台中可以找到。 在ubuntu下目录是 ~/.config/autostart 添…

《前端面试题》- JS基础 - 伪数组

第一次听说伪数组这个概念,听到的时候还以为是说CSS的伪类呢,网上一查,这东西原来还是个很常见的家伙。 何为伪数组 伪数组有两个特点: 具有length属性,其他属性(索引)为非负整数但是却不具备…

solidworks electrical 2D和3D有什么区别

SolidWorks Electrical 是一款专为电气设计开发的软件工具,它提供了两种主要的工作环境:2D电气设计和3D电气集成设计。两者在功能和应用场景上存在显著的区别: SolidWorks Electrical 2D 设计 特点与用途: SolidWorks Electrica…

小程序中配置scss

找到:project.config.json 文件 setting 模块下添加: "useCompilerPlugins": ["sass","其他的样式类型"] 配置完成后,重启开发工具,并新建文件 结果: