istio



istio1.5后版本包括组件:

控制平面: istiod(pilot,citadel,galley)
数据平面: istio-proxy(envoy开发版)
ingress gateway
egress gateway
addons

下载地址
https://github.com/istio/istio/releases

$ tar xf istio-1.14.1-linux-amd64.tar.gz
$ echo "export PATH=\$PATH:/root/istio/istio-1.14.1/bin" >>/etc/profile
$ source /etc/profile

列出支持的profile

$ istioctl profile list
Istio configuration profiles:
    default
    demo
    empty
    external
    minimal
    openshift
    preview
    remote

yaml 格式打印出profile 的资源配置清单。 istioctl profile dump 等价于 istioctl profile dump default

$ istioctl  profile dump
piVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
  components:
    base:
      enabled: true
    cni:
      enabled: false
    egressGateways:
    - enabled: false
      name: istio-egressgateway
    ingressGateways:
    - enabled: true
      name: istio-ingressgateway
    istiodRemote:
      enabled: false
    pilot:
      enabled: true
  hub: docker.io/istio
  meshConfig:
    defaultConfig:
      proxyMetadata: {}
    enablePrometheusMerge: true
  profile: default
  tag: 1.14.1
  values:
    base:
      enableCRDTemplates: false
      validationURL: ""
    defaultRevision: ""
    gateways:
      istio-egressgateway:
        autoscaleEnabled: true
        env: {}
        name: istio-egressgateway
        secretVolumes:
        - mountPath: /etc/istio/egressgateway-certs
          name: egressgateway-certs
          secretName: istio-egressgateway-certs
        - mountPath: /etc/istio/egressgateway-ca-certs
          name: egressgateway-ca-certs
          secretName: istio-egressgateway-ca-certs
        type: ClusterIP
      istio-ingressgateway:
        autoscaleEnabled: true
        env: {}
        name: istio-ingressgateway
        secretVolumes:
        - mountPath: /etc/istio/ingressgateway-certs
          name: ingressgateway-certs
          secretName: istio-ingressgateway-certs
        - mountPath: /etc/istio/ingressgateway-ca-certs
          name: ingressgateway-ca-certs
          secretName: istio-ingressgateway-ca-certs
        type: LoadBalancer
    global:
      configValidation: true
      defaultNodeSelector: {}
      defaultPodDisruptionBudget:
        enabled: true
      defaultResources:
        requests:
          cpu: 10m
      imagePullPolicy: ""
      imagePullSecrets: []
      istioNamespace: istio-system
      istiod:
        enableAnalysis: false
      jwtPolicy: third-party-jwt
      logAsJson: false
      logging:
        level: default:info
      meshNetworks: {}
      mountMtlsCerts: false
      multiCluster:
        clusterName: ""
        enabled: false
      network: ""
      omitSidecarInjectorConfigMap: false
      oneNamespace: false
      operatorManageWebhooks: false
      pilotCertProvider: istiod
      priorityClassName: ""
      proxy:
        autoInject: enabled
        clusterDomain: cluster.local
        componentLogLevel: misc:error
        enableCoreDump: false
        excludeIPRanges: ""
        excludeInboundPorts: ""
        excludeOutboundPorts: ""
        image: proxyv2
        includeIPRanges: '*'
        logLevel: warning
        privileged: false
        readinessFailureThreshold: 30
        readinessInitialDelaySeconds: 1
        readinessPeriodSeconds: 2
        resources:
          limits:
            cpu: 2000m
            memory: 1024Mi
          requests:
            cpu: 100m
            memory: 128Mi
        statusPort: 15020
        tracer: zipkin
      proxy_init:
        image: proxyv2
        resources:
          limits:
            cpu: 2000m
            memory: 1024Mi
          requests:
            cpu: 10m
            memory: 10Mi
      sds:
        token:
          aud: istio-ca
      sts:
        servicePort: 0
      tracer:
        datadog: {}
        lightstep: {}
        stackdriver: {}
        zipkin: {}
      useMCP: false
    istiodRemote:
      injectionURL: ""
    pilot:
      autoscaleEnabled: true
      autoscaleMax: 5
      autoscaleMin: 1
      configMap: true
      cpu:
        targetAverageUtilization: 80
      enableProtocolSniffingForInbound: true
      enableProtocolSniffingForOutbound: true
      env: {}
      image: pilot
      keepaliveMaxServerConnectionAge: 30m
      nodeSelector: {}
      podLabels: {}
      replicaCount: 1
      traceSampling: 1
    telemetry:
      enabled: true
      v2:
        enabled: true
        metadataExchange:
          wasmEnabled: false
        prometheus:
          enabled: true
          wasmEnabled: false
        stackdriver:
          configOverride: {}
          enabled: false
          logging: false
          monitoring: false
          topology: false

部署istio 到k8s ,默认部署到istio-system 名称空间

$ istioctl install --set profile=demo -y
✔ Istio core installed
✔ Istiod installed
✔ Egress gateways installed
✔ Ingress gateways installed
✔ Installation complete

创建一个名称空间自动注入 数据平面sidecar

基础环境

创建pod
$ kubectl run base --image=python -n test -- python -m http.server
创建svc
$ kubectl create svc clusterip base --tcp 8000:8000 -n test

$ kubectl label pod base app=base -n test

通过istio的gateway 把服务暴露出去

apiVersion: networking.istio.io/v1beta1
kind: Gateway
metadata:
  name: test-web    # 1
  namespace: istio-system
spec:
  selector:
    app: istio-ingressgateway  # 选择指定gateway
  servers:
  - name: test-web
    hosts:
    - "test-web.wed.com"  # 2
    port:
      name: test-web
      number: 80
      protocol: http
apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
  name: base
  namespace: test
spec:
  host: base.test.svc.cluster.local
$ istioctl proxy-config listeners base -n test
$ istioctl proxy-config clusters base -n test
$ istioctl proxy-config routes base -n test

集群子集

  • 版本1
$ kubectl run basev1 --image=python -n test -- sh -c "cd tmp;python -m http.server"
$ kubectl create    svc clusterip base --tcp 8000:8000 -n test

$ kubectl label pod basev1 app=base version=v1 -n test
  • 版本2
$ kubectl run basev2 --image=python -n test -- python -m http.server
$ kubectl create svc clusterip base --tcp 8000:8000 -n test
$ vkubectl label pod basev2 app=base version=v2 -n test
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: test-web
  namespace: istio-system
spec:
  gateways:
  - test-web
  hosts:
  - "test-web.wed.com"
  http:
  - route:
    - destination:
        host: base.test.svc.cluster.local
        port:
          number: 8000
        subset: v1
apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
  name: base
  namespace: test
spec:
  host: base.test.svc.cluster.local
  subsets:
  - name: v1
    labels:
      version: v1  # 匹配pod.spec.metadata.labels
  - name: v2
    labels:
      version: v2

故障注入.中断

apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: test-web
  namespace: istio-system
spec:
  gateways:
  - test-web
  hosts:
  - "test-web.wed.com"
  http:
  - route:
    - destination:
        host: base.test.svc.cluster.local
        port:
          number: 8000
    fault:
      delay:
        fixedDelay: 10s
        percentage:
          value: 50

操作标头

apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: test-web
  namespace: istio-system
spec:
  gateways:
  - test-web
  hosts:
  - "test-web.wed.com"
  http:
  - route:
    - destination:
        host: base.test.svc.cluster.local
        port:
          number: 8000
    headers:
      request:
      # 添加请求标头
        add:
          vip-level: v3
        set:
          User-Agent: Chrome
        remove:
        - method
      response:
        add:
          vip-level: v3
        set:
          User-Agent: Chrome
        remove:
        - method
      # 添加请求标头
        add:
          vip-level: v3
        set:
          User-Agent: Chrome
        remove:
        - method

match 类似nginx 中location

`yaml
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
name: test-web
namespace: istio-system
spec:
gateways:
– test-web
hosts:
– “test-web.wed.com”
http:
– match:
– headers:
User-Agent:
exact: Chrome
vip:
exact: “true”
route:
– destination:
host: base.test.svc.cluster.local
port:
number: 8000
subset: v1
– route:
– destination:
host: base.test.svc.cluster.local
port:
number: 8000

Original: https://www.cnblogs.com/wangend/p/16649606.html
Author: mingtian是吧
Title: istio

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/577174/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Mac 解决 Font family [‘sans-serif‘] not found

    注入产生的原理: 数据库设置为GBK编码: 宽字节注入源于程序员设置MySQL连接时错误配置为:set character_set_client=gbk,这样配置会引发编码转换从而…

    Python 2023年1月14日
    076
  • python中texttable库显示实时数据_Python Matplotlib.pyplot.table()用法及代码示例

    注入产生的原理: 数据库设置为GBK编码: 宽字节注入源于程序员设置MySQL连接时错误配置为:set character_set_client=gbk,这样配置会引发编码转换从而…

    Python 2023年1月15日
    066
  • DeepLabv3+

    注入产生的原理: 数据库设置为GBK编码: 宽字节注入源于程序员设置MySQL连接时错误配置为:set character_set_client=gbk,这样配置会引发编码转换从而…

    Python 2023年1月19日
    061
  • 如何在控制台实现一个数据管理系统(包括MYSQL数据库的增删改查)

    为了方便的实现记录数据、修改数据没有精力去做一个完整的系统去管理数据。因此,在python的控制台直接实现一个简易的数据管理系统,包括数据的增删改查等等。只需要在控制台层面调用相应…

    Python 2023年5月24日
    021
  • pytest篇11-allure-pytest(1)

    注入产生的原理: 数据库设置为GBK编码: 宽字节注入源于程序员设置MySQL连接时错误配置为:set character_set_client=gbk,这样配置会引发编码转换从而…

    Python 2023年1月17日
    083
  • 爬虫 – Scrapy五大核心组件

    注入产生的原理: 数据库设置为GBK编码: 宽字节注入源于程序员设置MySQL连接时错误配置为:set character_set_client=gbk,这样配置会引发编码转换从而…

    Python 2023年1月26日
    069
  • Win10安装flask

    注入产生的原理: 数据库设置为GBK编码: 宽字节注入源于程序员设置MySQL连接时错误配置为:set character_set_client=gbk,这样配置会引发编码转换从而…

    Python 2023年1月2日
    089
  • Ubuntu下安装PyTorch杂记

    最近几天我一直常用的Kubuntu(KDE yes!)更新至22.04后居然出现无法更改软件源的bug,去Kubuntu论坛一看有同样问题的人还不在少数,但却没有好的解决办法,故而…

    Python 2023年5月24日
    017
  • 说话人识别神经网络推理方式

    注入产生的原理: 数据库设置为GBK编码: 宽字节注入源于程序员设置MySQL连接时错误配置为:set character_set_client=gbk,这样配置会引发编码转换从而…

    Python 2023年2月2日
    071
  • 数据可视化之使用Matplotlib绘制甘特图

    1.引言 甘特图已经拥有 100 多年的历史,这种可视化图表对项目管理非常有用。 Henry Gantt 为了分析已经完成的项目创建了甘特图,他最初设计这个可视化工具主要用来衡量员…

    Python 2023年9月2日
    012
  • 上周热点回顾(10.24-10.30)

    注入产生的原理: 数据库设置为GBK编码: 宽字节注入源于程序员设置MySQL连接时错误配置为:set character_set_client=gbk,这样配置会引发编码转换从而…

    Python 2023年1月30日
    083
  • Java代码审计之不安全的Java代码

    注入产生的原理: 数据库设置为GBK编码: 宽字节注入源于程序员设置MySQL连接时错误配置为:set character_set_client=gbk,这样配置会引发编码转换从而…

    Python 2023年1月31日
    075
  • 疫情在家用Python搞副业,也能月入10000+

    注入产生的原理: 数据库设置为GBK编码: 宽字节注入源于程序员设置MySQL连接时错误配置为:set character_set_client=gbk,这样配置会引发编码转换从而…

    Python 2023年1月20日
    056
  • 游戏开发- Python语言在游戏开发中的潜力

    Python 因其适用于多种用途和各种项目(从数据分析和可视化到人工智能、语言开发、设计和 Web 开发)而赢得了广泛使用的工具的赞誉。 也就是说,Python 并不因其在视频游戏…

    Python 6天前
    05
  • Django 连接数据库 MySQL

    注入产生的原理: 数据库设置为GBK编码: 宽字节注入源于程序员设置MySQL连接时错误配置为:set character_set_client=gbk,这样配置会引发编码转换从而…

    Python 2023年2月3日
    053
  • mapboxgl加载tiff

    注入产生的原理: 数据库设置为GBK编码: 宽字节注入源于程序员设置MySQL连接时错误配置为:set character_set_client=gbk,这样配置会引发编码转换从而…

    Python 2023年1月31日
    053
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球