istio 三日谈之一: 环境准备

使用Spring Boot+gRPC构建微服务并部署到Istio 使用Spring Boot+gRPC构建微服务并部署到Istio 作为Service Mesh和云原生技术的忠实拥护者,我却一直没有开发过Service Mesh的应用。正好最近受够了Spring Cloud的“折磨”,对Kubernetes也可以熟练使用了,而且网上几乎没有Spring Boot微服务部署到Istio的案例,我就开始考虑用Spring Boot写个微服务的Demo并且部署到Istio。项目本身不复杂,就是发送一个字符串并且返回一个字符串的最简单的Demo。 题外话:我本来是想用Sprin 阅读详情

尝试在一个准生产环境下,利用 istio 来对运行在 Kubernetes 上的微服务进行管理。

这一篇是第一篇,将一些主要的坑和环境准备工作。

内容较多,因此无法写成手把手教程,希望读者有一定 Kubernetes 的操作基础。

准备镜像

初始运行需要的镜像包括以下几个:

  • istio/mixer:0.1.6
  • pilot:0.1.6
  • proxy_debug:0.1.6
  • istio-ca:0.1.6

首先要解决的自然还是镜像的存放问题,官方在源码中提供了很方便的工具,用来根据模板生成在 Kubernetes 中运行 istio 的 YAML 文件:

./updateVersion.sh \
    -p 10.211.55.86:5000/istio,0.1.6 \
    -c 10.211.55.86:5000/istio,0.1.6 \
    -x 10.211.55.86:5000/istio,0.1.6

这一脚本在源码的 install 目录下。

Kubernetes 环境

这里我们使用的集群大概情况是:

  • 1.7.1 版本的 Kubernetes
  • 开启了 RBAC
  • 预备使用的命名空间为:default
  • PVC 自动供给
  • 无互联网连接
  • 具有自己的私库

启动 istio

RBAC 相关

首先,install 目录中提供的 rbac 文件授权范围不足,所以需要手工编辑istio-rbac-beta.yaml,把其中的几个 RoleBinding,改为 ClusterRoleBinding。

kubectl create \
    -f istio-rbac-beta.yaml

另外缺省的 ClusterRole 中缺乏对 Namespace 的权限,新版本已经修正,目前版本仍需添加:

kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: istio-pilot
rules:
- apiGroups: ["istio.io"]
  resources: ["istioconfigs", "istioconfigs.istio.io"]
  verbs: ["*"]
- apiGroups: ["extensions"]
  resources: ["thirdpartyresources", "thirdpartyresources.extensions", "ingresses", "ingresses/status"]
  verbs: ["*"]
- apiGroups: [""]
  resources: ["configmaps", "endpoints", "pods", "services"]
  verbs: ["*"]
- apiGroups: [""]
  resources: ["namespaces", "nodes", "secrets"]
  verbs: ["get", "list", "watch"]

启动 istio 组件

kubectl create \
    -f istio.yaml \

创建 PVC

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: frontend-v1
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi

准备工作负载

这里我们使用官方的 PHP + Apache 镜像作为工作负载来进行下面的测试,例如我们准备好的 YAML 如下:

Deployment:

kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  name: frontend
  labels:
    name: frontend
    version: "1"
spec:
  replicas: 1
  template:
    metadata:
      labels:
        name: frontend
        version: "1"
    spec:
      containers:
      - name: php
        image: 10.211.55.86:5000/php:7.1.7-apache
        ports:
        - containerPort: 80
          protocol: TCP
        volumeMounts:
        - name: wwwroot
          mountPath: /var/www/html
        env:
        - name: "SERVICE_VERSION"
          value: "1"      
        volumes:
      - name: wwwroot
        persistentVolumeClaim:
          claimName: frontend-v1

服务定义:

kind: Service
apiVersion: v1
metadata:
  name: svc-frontend
  labels:
    name: frontend
    version: "1"
spec:
  type: NodePort
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
    nodePort: 32010  
  selector:
    name: frontend

在 Web 目录中我们随便做了个index.php,用来展示当前所在 Pod 和环境变量中的服务版本号,备用。

Tips:一般这类测试,我都懒得重新做一个 Docker 镜像,一般是另外用一个 Pod 挂载同一个 PVC,直接编辑页面文件,或者使用kubectl cp命令进行拷贝。

index.php

<?php
header("Content-type: text/plain");
echo "From: ".gethostname()."\n";
echo "Version: ".$_ENV['SERVICE_VERSION']."\n";

delay.php

<?php
header("Content-type: text/plain");
sleep(4);
echo "\n-----------------------------\n";
echo "\nFrom: ".gethostname()."\n";
echo "Version: ".$_ENV['SERVICE_VERSION']."\n";

运行成功后,访问该服务的 nodePort,会看到相应的输出内容。

istio 的注入

首先用kubectl delete -f删除上文的服务和 Deployment。

上面为了测试方便,给 Service 使用了 NodePort 类型,这里我们去掉这一服务的 NodePort,用 ClusterIP 的形式运行:

spec:
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
  selector:
    name: frontend

接下来进行注入操作

istioctl kube-inject -f frontend-v1.yaml > frontend-v1-istio.yaml

观察注入操作会发现,其中多了一个 Sidecar Container(下面的 Image 节内容已经被我修改为本地私库):

    env:
    - name: POD_NAME
      valueFrom:
        fieldRef:
          fieldPath: metadata.name
    - name: POD_NAMESPACE
      valueFrom:
        fieldRef:
          fieldPath: metadata.namespace
    - name: POD_IP
      valueFrom:
        fieldRef:
          fieldPath: status.podIP
    image: 10.211.55.86:5000/istio/proxy_debug:0.1.6
    imagePullPolicy: Always
    name: proxy
    resources: {}
    securityContext:
      runAsUser: 1337

另外还在pod.beta.kubernetes.io/init-containers注解中进行了初始化:

[{
  "args": ["-p", "15001", "-u", "1337"],
  "image": "10.211.55.86:5000/istio/init:0.1",
  "imagePullPolicy": "Always",
  "name": "init",
  "securityContext": {
    "capabilities": {
      "add": ["NET_ADMIN"]
    }
  }
}, {
  "args": ["-c", "sysctl -w kernel.core_pattern=/tmp/core.%e.%p.%t \u0026\u0026 ulimit -c unlimited"],
  "command": ["/bin/sh"],
  "image": "10.211.55.86:5000/alpine",
  "imagePullPolicy": "Always",
  "name": "enable-core-dump",
  "securityContext": {
    "privileged": true
  }
}]

可以看到上面一共涉及三个镜像:

  • docker.io/istio/proxy_debug:0.1
  • docker.io/istio/init:0.1
  • alpine

经过一番折腾:

  1. 原有 YAML
  2. 注入,生成新的 YAML
  3. 替换新 YAML 中的镜像地址

就把原有的容器应用封装成新的 istio 支持的微服务了。

准备测试素材

另外我们需要准备一个工具服务,用于在 shell 中进行测试:

kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  name: tool
  labels:
    name: tool
    version: "1"
spec:
  replicas: 1
  template:
    metadata:
      labels:
        name: tool
        version: "1"
    spec:
      containers:
      - name: tool
        image: 10.211.55.86:5000/php:7.1.7-apache
        ports:
        - containerPort: 80
          protocol: TCP
        volumeMounts:
        - name: wwwroot
          mountPath: /var/www/html
      volumes:
      - name: wwwroot
        persistentVolumeClaim:
          claimName: frontend-v1
---
kind: Service
apiVersion: v1
metadata:
  name: tool
  labels:
    name: tool
spec:
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
  selector:
    name: tool

同样的,这里也需要执行istioctl kube-inject进行注入,运行之后,就得到一个运行于集群内部的 Linux Shell,istio 中的路由策略经常是客户端和服务器协同完成的,因此上客户和服务器的 Deployment 都需要进行注入操作。

K8S中文文档  docs.kubernetes.org.cn

转自:https://www.kubernetes.org.cn/2449.html

Istio及Bookinfo示例程序安装试用笔记 本博客为 http://zhaohuabing.com 在优快云的镜像,评论请移步 http://zhaohuabing.com/2017/11/04/istio-install_and_example/ Istio是来自Google,IBM和Lyft的一个Service Mesh(服务网格)开源项目,是Google继Kubernetes之后的又一大作,本文将演示如何从裸机开始从零搭建Istio及Bookinfo示 阅读详情

相关推荐

“迎圣诞,拿大奖” 活动赛题 Web-SQLi

1. php中sprintf()函数漏洞原理及其利用; 2. mysql盲注语法及python脚本; 3. sqlmap的需要进一步学习;

qq_34106499的博客 674

istio 三日谈之一,环境准备

笔者尝试在一个准生产环境下,利用 istio 来对运行在 Kubernetes 上的微服务进行管理。 这一篇是第一篇,将一些主要的坑和环境准备工作。 内容较多,因此无法写成手把手教程,希望读者有一定 Kubernetes 的操作基础。 准备镜像 初始运行需要的镜像包括以下几个: istio/mixer:0.1.6pilot:0.1.6proxy_debug:0.1.6

Kubernetes中文社区 7452

《2020-11-12》istio安装及inject

istio 1. 介绍 pilot 服务发现 kiali 控制面板 prometheus 监控 telemetry 遥测 gateway 网关 //todo 2. 安装 官方中文文档 https://preliminary.istio.io/zh/docs/setup/getting-started 2.1 在k8s中安装步骤 下载地址 https://github.com/istio/istio/releases/ 或者直接curl下载 curl -L https://istio.io/downloa

guoxiaozhong的博客 905

Petalinux实战:3种方法调试AXI UART Lite设备(含minicom/screen/直接寄存器操作对比)

本文详细介绍了在Zynq平台上使用Petalinux调试AXI UART Lite设备的三种实用方法:用户空间工具(minicom/screen)、应用层程序(termios配置)和底层寄存器直接操作。文章对比了各方法的优缺点与适用场景,并重点解析了设备树配置、驱动加载等关键环节,帮助开发者快速定位并解决串口通信中的常见问题。

weixin_29190169的博客 432

ESP32对接百度智能云语音识别:从硬件配置到API调用的完整指南

本文详细介绍了ESP32对接百度智能云语音识别的完整流程,从硬件配置到API调用,涵盖麦克风选择、音频处理、错误处理及性能优化等关键环节。通过实战案例展示如何实现低成本、高效率的语音交互方案,特别适合智能硬件开发者参考。

weixin_29198045的博客 372

Istio安装及流量测试

Istio部署(本次安装以1.0.0为例) 下载istio #macOS 或者 Linux 系统,使用如下命令自动下载和解压最新的发行版 curl -L https://git.io/getLatestIstio | sh - 或者到如下页面,根据操作系统下载对应发行版 Istio release 1。解压安装文件,切换到文件所在目录。安装文件目录下包含: install/ 目录下是 Kube...

qq_42747099的博客 849

深入解析GEM5 McPAT NoC功耗模型:从arbiter电容计算到微架构关联

本文深入解析GEM5 McPAT NoC功耗模型,重点探讨arbiter电容计算与微架构的关联。通过拆解动态功耗公式和四类电容的物理本质,揭示能量与功率的转换关系,并提供参数调试和模型精度优化的实战技巧,帮助开发者更准确地预测和优化NoC功耗。

weixin_29305313的博客 201

Istio 1.11.2 底层自动注入流程

自动注入流程 简单说下 正式开始之前简单说一下 webhook,这样对以下理解更方便一些。 准入控制器也就是 webhook 会拦截 API Server 收到的请求,拦截发生在认证和鉴权完成之后,对象进行持久化之前(这个时候可以修改 pod 模版完成自动注入)。可以定义两种类型的 webhook: Mutating 和 Validating Mutating 修改资源,可以对请求内容进行修改 Validating 验证资源,根据请求的内容判断是继续执行该请求还是拒绝该请求 实现流程 pkg/kub

baobaoxiannv的博客 1618

华为OD机考双机位C卷 - 两个字符串间的最短路径(Java & Python& JS & C/C++ & GO )

华为OD机考双机位C卷 - 两个字符串间的最短路径(OD上机考试双机位C卷)。提供Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。

算法大师! 834

在 SAP BTP 中玩转工厂日历 Maintain Factory Calendars 实战指南

工厂日历是企业关键的时间主数据,基于国家假日历定义工作日与非工作日,广泛应用于生产计划、采购交期、财务结账等业务场景。SAP系统通过三类应用(维护节假日、假日历和工厂日历)实现分层配置。工厂日历作为顶层配置,支持工作日模式设定和例外规则添加。在多系统架构中,工厂日历可通过集成场景同步,确保数据一致性。应用支持创建、编辑和查看功能,包含有效期设置、例外规则管理和多语言文本维护。合理设置工厂日历对业务运营至关重要,需注意命名规范和有效期选择,避免历史数据问题。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 222

istio流量管理

istio 官方示例 bookinfo 配置sidecar注入 istioctl kube-inject --debug -f samples/bookinfo/kube/bookinfo.yaml &gt; bookinfo2.yaml 使用kubernetes创建示例 kubernetes create -f bookinfo2.yaml 配置gateway expo...

wenwenxiong的专栏 1286

Python李峋同款跳动的爱心(完整代码)

Python语言实现李峋同款可写字版跳动的爱心的完整代码。

AIGC 4万+

istio 三日谈之二,路由规则

路由控制是 istio 的最常用功能了,经过前面的准备,我们已经基本可以进行这些内容的尝试了。 注意下面的路由规则都忽略了对来源的过滤,会显得比较呆板或者说没用,但是在加入过滤条件之后,就完全不可同日而语了。具体的过滤规则的写法可以参考官方文档或者 istio 中的 bookinfo 实例。 创建 frontend-v2 为了展示路由分配的能力,我们首先创建一个名为fronten

Kubernetes中文社区 2476

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Istio入坑指南(二) Istio的安装与简单的使用

Service Mesh 一、Istio安装 1、环境要求: docker —> Docker Desktop for win 安装教程 kubernetes —> 具体版本根据Istio版本选择 使用Docker Desktop提供的Kubernetes环境。 设置中修改Docket Desktop 中Docker Engine配置,添加国内镜像地址 { "registry-mirrors": [ "https://docker.mirrors.ustc.e

Wang_0202的博客 4940

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

部署Istio,应用接入Istio(Sidecar注入)

查看配置文件的名称,生产环境建议使用default,基本上核心功能都有,minimal是以最小版本去部署的,demo功能多一点,比default多一点。我们这里使用default进行部署安装。下面是查看有哪些配置文件的名称。 在install不指定profile那么默认就是使用default。安装的时候后面可以添加--set-profile=default -y部署完查看结果,部署了两个pod,一个istiod,也就是它的控制平面,ingressgateway是用来接受网格流量的,就类似于nginx-i

小楼一夜听春雨,深巷明朝卖杏花 2560

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Kubernetes进阶-8基于Istio实现微服务治理

该应用由四个单独的微服务构成。这个应用模仿在线书店的一个分类,显示一本书的信息。页面上会显示一本书的描述,书籍的细节(ISBN、页数等),以及关于这本书的一些评论。. 这个微服务会调用details和reviews两个微服务,用来生成页面。details. 这个微服务中包含了书籍的信息。reviews. 这个微服务中包含了书籍相关的评论。它还会调用ratings微服务。ratings. 这个微服务中包含了由书籍评价组成的评级信息。reviewsv1 版本不会调用ratings服务。

m0_63086381的博客 1455

kubernetes Istio是什么

一、Istio Istio 是一个服务网格,它允许集群中的 pods 和服务之间进行更详细、复杂和可观察的通信。 它通过使用 CRD 扩展 Kubernetes API 来进行管理,它将代理容器注入到所有 pods 中,然后由这些 pods 来控制集群中的流量。 二、kube-proxy Kubernetes 中的服务是由运行在每个节点上的kube-proxy组件实现的,该组件创建 iptables 规则,并将请求重定向到 Pod。 因此,服务就是 iptables 规则。 ...

软件工程小施同学 的专栏 1434

Istio 注入原理

Istio通过注入边车使得本身的应用获取了一些高级能力,是如何完成边车的注入的呢? 注入方式 手动注入 - 针对具体的一个资源对象 工作原理: 通过改写yaml文件植入Istio-proxy容器,以及init-container用于修改iptables规则。 配置方法:istioctl kue-inject <deploy.yaml> -o <inject.yaml> | kubectl apply -f - 自动注入 - 针对命名空间内的所有资源对象 工作原理: 通过web

叶康铭的博客 2866

Java操作Istio虚服务VirtualService

结果莫名其妙报错了: com.fasterxml.jackson.annotation.JsonTypeInfo$Id.DEDUCTION 版本冲突

zanhai的专栏 783

[Kubernetes] 云原生 Istio 介绍

服务网格 Istio

959 1985

探秘Kubernetes微服务神器Istio,引爆你的应用性能

随着互联网应用的迅猛发展,软件架构也经历了从单体应用到分布式微服务的演进。微服务架构通过将应用拆分为小型、自治的服务单元,使得开发团队可以更加灵活地构建、部署和维护应用。然而,微服务架构也带来了诸多挑战,如服务间通信管理、服务发现、流量控制和安全性等问题,这些问题直接影响了系统的可靠性和扩展性。Istio是一个由Google、IBM和Lyft联合开发的开源项目,旨在解决微服务架构中的服务发现、负载均衡、流量控制、故障恢复等问题。

qq_42538588的博客 1174

Service Mesh:Istio与Java微服务整合

Service Mesh是一种基础设施层,负责微服务之间的服务发现、负载均衡、故障恢复、安全和监控。在Service Mesh的帮助下,开发人员可以将服务间的复杂性从应用程序代码中抽离出来,专注于业务逻辑的开发。Istio是一个开源的Service Mesh,提供了透明的服务治理能力,能与多种微服务框架(如Spring Boot和Quarkus)结合使用。

weixin_53840353的博客 1279

(推荐) Istio:Google、IBM 和 Lyft 联合开源的微服务框架

Istio是Google、IBM和Lyft联合开源的微服务Service Mesh框架,旨在解决大量微服务的发现、连接、管理、监控以及安全等问题。 Istio的主要特性包括: HTTP、gRPC和TCP网络流量的自动负载均衡丰富的路由规则,细粒度的网络流量行为控制流量加密、服务间认证,以及强身份声明全范围(Fleet-wide)策略执行深度遥测和报告 原理 Istio从逻辑

大树叶 技术专栏 2943

【云原生】Kubernetes(k8s)Istio Gateway 介绍与实战操作

Istio提供一种简单的方式来为已部署的服务建立网络,该网络具有负载均衡、服务间认证、监控、网关等功能,而不需要对服务的代码做任何改动。这里主要讲服务。istio 适用于容器或虚拟机环境(特别是 k8s),兼容异构架构。istio 使用 sidecar(边车模式)代理服务的网络,不需要对业务代码本身做任何的改动。HTTP、gRPC、WebSocket 和 TCP 流量的自动负载均衡。istio 通过丰富的路由规则、重试、故障转移和故障注入,可以对流量行为进行细粒度控制;

匠人精神,持之以恒! 6541
上一篇: Kubernetes系列01:Kubernetes入门
下一篇: istio 三日谈之二,路由规则
大树叶
博客等级 码龄12年 1171粉丝 664原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值