使用Istio的Envoyfilter做kubernetes的出口http拦截

这篇具有很好参考价值的文章主要介绍了使用Istio的Envoyfilter做kubernetes的出口http拦截。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前提

以下步骤均在无法访问docker.io的集群下操作,如果集群可以连接docker.io,则不需要准备镜像包,直接在docker.io中拉取即可

场景

部署在kubernetes中的pod,在往外部请求的时,外部服务期望能知道是哪个pod调用的,以保证数据安全,在外部服务之前,用abac配置了对pod的环境限制,比方说我有两个kubernetes环境,一个是沙箱测试环境,一个是沙箱生产环境。如果abac中配置的策略为只允许在沙箱测试环境调用,当pod在调用外部http接口时,会携带上当前的kubernetes环境的唯一标识。

准备工作

  1. 安装istio需要两个镜像,pilot、proxyv2,确保当前环境的harbor中存在
  2. Istio官网
  3. Istio Github

安装包

istio-1.20.0-linux-amd64.tar.gz

镜像包

pilot.tar
proxyv2.tar

镜像准备

  1. 把镜像包加载到本地docker中
docker load -i pilot.tar
docker load -i proxyv2.tar
  1. 修改镜像tag
docker tag 4bfb4a2c6118 registry-cnp-dev.inspurcloud.cn/istio/pilot:1.20.0
docker tag df8296c1ff53 registry-cnp-dev.inspurcloud.cn/istio/proxyv2:1.20.0
  1. 推送镜像
docker push registry-cnp-dev.inspurcloud.cn/istio/pilot:1.20.0
docker push registry-cnp-dev.inspurcloud.cn/istio/proxyv2:1.20.0

安装istio

  1. 解压istio
tar -xvf istio-1.20.0-linux-amd64.tar.gz
  1. 修改istio安装的配置文件
cd istio-1.20.0/manifests/profiles/
vim demo.yaml

#### spec下增加hub和tag,hub的地址为当前环境的仓库域名 后面加上/istio
spec:
	hub: xxxxxx/istio
	tag: 1.20.0
  1. 配置环境变量
  2. 执行安装命令
istioctl install --set profile=demo -y

执行完安装命令后,再打开一个ssh窗口

  1. 查询kubernetes的deployment
kubectl get deploy -n istio-system

#### 结果
root@master01:~# kubectl get deploy -n istio-system
NAME     READY   UP-TO-DATE   AVAILABLE   AGE
istiod   0/1     1            0           69s
  1. 修改deployment的yaml
kubectl edit deploy -n istio-system istiod


#### 在spec.template.spec下增加下面配置,指定调度到master01节点上
nodeSelector:
  kubernetes.io/hostname: master01

### 检查spec.template.spec.containers.image 是否正确,如果不正确,需要改成当前环境的仓库域名(镜像准备时推送的harbor仓库地址)
image: docker.io/istio/pilot:1.20.0 # 默认是docker.io,需要改成xxxxxxx

### 修改完毕之后,用esc ---> :wq 保存

重复执行4,查询下状态,直到istiod的READY是 1/1,证明启动成功

root@master01:~# kubectl get deploy -n istio-system
NAME                   READY   UP-TO-DATE   AVAILABLE   AGE
istio-egressgateway    0/1     1            0           2m22s
istio-ingressgateway   0/1     1            0           2m22s
istiod                 1/1     1            1           7m28s

可以看到又出现了两个deployment,按照上述的步骤5,把istio-egressgateway和istio-ingressgateway的配置修改
注意:命令中修改哪个deployment名字,需要修改,把istiod改为要修改的deployment
例如:kubectl edit deploy -n istio-system istio-ingressgateway

直到3个deployment都启动成功,就可以进行部署EnvoyFilter了

root@master01:~# kubectl get deploy -n istio-system
NAME                   READY   UP-TO-DATE   AVAILABLE   AGE
istio-egressgateway    1/1     1            1           9m2s
istio-ingressgateway   1/1     1            1           9m2s
istiod                 1/1     1            1           14m

部署EnvoyFilter

  1. 创建envoyfilter.yaml
vim envoyfilter.yaml
apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
  name: my-envoy-filter
  namespace: ibp-test
spec:
  configPatches:
    - applyTo: HTTP_FILTER
      match:
        context: SIDECAR_OUTBOUND
        listener:
          filterChain:
            filter:
              name: "envoy.filters.network.http_connection_manager"
              subFilter:
                name: "envoy.filters.http.router"
      patch:
        operation: INSERT_BEFORE
        value:
          name: add-pod-header
          typed_config:
            "@type": "type.googleapis.com/envoy.extensions.filters.http.lua.v3.Lua"
            inlineCode: |
              function envoy_on_request(request_handle)
                local authority = request_handle:headers():get("host")
                local ip_pattern = "(%d+.%d+.%d+.%d+)"
                local ip = string.match(authority, ip_pattern)
                if ip == "xxxxx" or ip == "xxxxx" then
                  local pod_name = os.getenv("POD_NAME") or "unknown_pod"
                  request_handle:headers():add("X-POD-NAME", pod_name)
                  request_handle:headers():add("X-SPACE", "FUNCTION")
                end
              end
  1. 开启自动注入
kubectl label namespace ibp-test istio-injection=enabled
  1. 应用 EnvoyFilter 到 Kubernetes 集群
kubectl apply -f envoyfilter.yaml
  1. 验证部署
kubectl get envoyfilter -n ibp-test

注意:历史的pod需要重启才会生效!

创建http流量

在envoyfilter中,只会拦截被视为http流量的端点,所以还需要另外创建http流量,使envoyfilter拦截生效

  1. 创建envoy-filter-open-ports.yaml
apiVersion: v1
kind: Service
metadata:
  name: envoy-filter-open-ports
  namespace: ibp-test
spec:
  ports:
    - name: http-9234
      protocol: TCP
      port: 9234
      targetPort: 9234
    - name: http-9001
      protocol: TCP
      port: 9001
      targetPort: 9001
    - name: http-20040
      protocol: TCP
      port: 7082
      targetPort: 7082
  type: ClusterIP
  1. kubernetes创建service
kubectl create -f envoy-filter-open-ports.yaml

卸载

istioctl uninstall -y --purge

版本对照关系

istio envoy 拦截请求,Istio,Kubernetes,istio,kubernetes,http
istio envoy 拦截请求,Istio,Kubernetes,istio,kubernetes,http

问题汇总

Q: 启动pod的时候,还是会去docker.io中拉取镜像启动initContainer
A: deployment配置如下文章来源地址https://www.toymoban.com/news/detail-832575.html

apiVersion: apps/v1
kind: Deployment
metadata:
  name: httpbin
spec:
  replicas: 1
  selector:
    matchLabels:
      app: httpbin
      version: v1
  template:
    metadata:
      annotations:
        "sidecar.istio.io/proxyImage": docker.io/istio/proxyv2:1.20.0 # 这里修改具体的镜像仓库
      labels:
        app: httpbin
        version: v1
    spec:
      serviceAccountName: httpbin
      containers:
      - image: docker.io/kong/httpbin
        imagePullPolicy: IfNotPresent
        name: httpbin
        ports:
        - containerPort: 80

到了这里,关于使用Istio的Envoyfilter做kubernetes的出口http拦截的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 在Mac本地搭建Kubernetes和Istio的详细教程

    Kubernetes(简称K8s)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。而Istio是一个服务网格,用于管理和连接微服务,提供负载均衡、流量控制、故障恢复等功能。本文将详细介绍如何在Mac本地使用kind(Kubernetes in Docker)工具搭建Kubernetes集群,并在

    2024年02月13日
    浏览(41)
  • Java微服务架构的选择:Spring Cloud、Kubernetes还是Kubernetes + Istio?

    微服务架构已经成为现代软件开发的趋势,其可以带来高度可伸缩性、松耦合性和团队自治性等优势。 在Java开发领域中,选择适合的微服务架构是非常关键的决策,本文将探讨Spring Cloud、Kubernetes和Kubernetes+Istio这三个架构选择的优势和劣势。 1. 简介 在开始具体探讨之前,我

    2024年02月22日
    浏览(60)
  • 5分钟安装Kubernetes+带你轻松安装istio服务网格指南

    上次我跟大家简单介绍了一下Kubernetes的各个组件及其含义,本期本来计划带领大家一起学习一些常用命令,但我认为这种方式可能无法达到学习的效果。有可能你们会直接忘记,甚至可能没有兴趣去学。我也理解,心想这跟我有什么关系,我本地又搭建不起来K8s。 我一直坚

    2024年02月04日
    浏览(51)
  • 部署Online Boutique 项目在 Kubernetes并启用 Istio 支持

    https://zhuanlan.zhihu.com/p/506007550 1.在github中下载windows版本的istio.exe,解压后 将/bin目录放入path变量中。 2.运行cmd,检查一下 istio 环境以及版本信息: 3.开始使用  demo  配置文件进行 Istio 安装:(这一步可能需要科学上网,我设置了全局代理才下载成功) 4.验证是否下载成功

    2024年02月09日
    浏览(34)
  • metallb , istio ingress 部署httpbin使用例子

    安装metaillb,参考:Kubernetes的负载均衡方案:MetalLB - 文章详情 MetalLB  需要使用严格的  ARP  模式。需要设置  strictARP  参数为  true 。 配置文件文件: 或者执行以下命令打开: 修改如下配置: 将strictARP: false 改为 strictARP: true 修改后重启  kube-proxy 。 配置负载均衡ip池 3. 配

    2024年02月12日
    浏览(38)
  • 使用kind在mac本地搭建k8s及istio

    之前使用multipass装ubuntu,然后再用microk8s搭建k8s,这会直接用orbstack及kind在本地搭建k8s及istio 通过orbstack这个地址下载,主要是开销低,用来替代docker desktop 添加国内源 ~/.orbstack/config/docker.json 重启orbstack 或者下载https://github.com/istio/istio/releases/download/1.18.2/istio-1.18.2-osx-arm64.ta

    2024年02月14日
    浏览(48)
  • Istio实战:Istio & Kiali部署与验证

    前几天我就开始捣腾Istio。前几天在执行istioctl install --set profile=demo -y 的时候老是在第二步就报错了,开始我用的istio版本是1.6.8。 后面查看k8s与istio的版本对应关系后发现我的k8s是1.20.0,于是我将istio升级到了1.13.4,在执行istioctl install --set profile=demo -y 的时候还是同样的问题,

    2024年02月22日
    浏览(41)
  • 【Istio实际操作篇】Istio入门10分钟快速安装

    上一篇讲了什么是Istio的理论篇,这次我们就来实际操作。 想看上一篇理论篇的看这里(看完绝对有所收获): [Istio是什么?] 还不知道你就out了,一文40分钟快速理解_小叶的技术Logs的博客-CSDN博客 本文有两个版本, 详细版、简洁版 。 前者适合新手,后者适合老手**(方便大

    2024年02月09日
    浏览(49)
  • Istio入门体验系列——基于Istio的灰度发布实践

    导言:灰度发布是指在项目迭代的过程中用平滑过渡的方式进行发布。灰度发布可以保证整体系统的稳定性,在初始发布的时候就可以发现、调整问题,以保证其影响度。作为Istio体验系列的第一站,本文基于Istio的流量治理机制,针对最简单的几种业务场景进行了实践,为后

    2024年02月12日
    浏览(35)
  • Isito 入门:为什么学 Istio、Istio 是什么

    本教程已加入 Istio 系列:https://istio.whuanle.cn 目录 1,Istio 概述 🚩聊聊微服务设计 🥇只使用 Kubernetes 部署容器, 🥈开始使用一些中间件,完善基础设施 ❓我为什么要学 Istio 💡所以,Istio 是什么 Istio 三个主要功能 Istio 原理 似乎用上 Kubernetes ,就是微服务系统了。 碰到很

    2024年02月06日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包