istio


听说过 istio 但是一直没有怎么使用过。

Istio 的核心理念是提供一个服务网格平台,用于连接、保护、控制和观测微服务应用程序。通过在现有的分布式微服务架构上增加一个透明层,Istio 旨在实现以下目标:

  1. 连接:简化服务之间的网络通信,同时提供负载均衡、故障恢复和端到端身份验证功能。
  2. 保护:提供安全通信,可以自动为服务间通信提供双向 TLS 加密认证,确保数据在传输过程中的安全性。
  3. 控制:通过强大的流量管理,实现灵活的路由规则、重试、故障注入以及故障切换功能,便于应对各种运维场景。
  4. 观测:提供有关服务间通信的详细指标、日志和追踪数据,帮助监控和诊断分布式系统的问题。

这些核心理念使得 Istio 成为一个可扩展且易于集成的服务网格解决方案,帮助开发者和运维人员更好地管理和维护复杂的微服务应用。

注入 Envoy 代理

为 Pod 注入 Istio Sidecar,您需要遵循以下步骤:

  1. 安装并部署 Istio:首先,请确保您已在 Kubernetes 集群中安装和部署了 Istio。您可以参照 Istio 的官方文档来完成这个过程:https://istio.io/latest/docs/setup/install/

  2. 打开自动 Sidecar 注入:为特定的命名空间启用自动 Sidecar 注入。运行以下命令将为您的命名空间添加 istio-injection=enabled 标签(将 <NAMESPACE> 替换为目标命名空间):

    kubectl label namespace <NAMESPACE> istio-injection=enabled
  3. 部署应用:现在,在启用 Sidecar 注入的命名空间中部署您的 Kubernetes 应用。Istio 会在每个 Pod 中自动注入一个 Sidecar 代理(Envoy 容器)。 例如,使用以下命令部署示例应用:

    kubectl apply -f <YOUR_APPLICATION_YAML> -n <NAMESPACE>
  4. 验证 Sidecar 注入:检查已部署的 Pod,以确认 Sidecar 已成功注入。运行以下命令(将 <NAMESPACE> 替换为目标命名空间):

    kubectl get pods -n <NAMESPACE>

    输出结果中,如果每个 Pod 后面的数字为 “2/2” 或其他大于 1 的数字,表明 Sidecar 已成功注入。

注意:如果您需要手动注入 Sidecar,可以使用 istioctl kube-inject 命令。在部署应用之前,请运行以下命令(将 <YOUR_APPLICATION_YAML> 替换为您的应用 YAML 文件;<OUTPUT_YAML> 替换为带有注入 Sidecar 的输出 YAML 文件):

istioctl kube-inject -f <YOUR_APPLICATION_YAML> > <OUTPUT_YAML>

然后,使用 kubectl apply 部署输出 YAML 文件:

kubectl apply -f <OUTPUT_YAML> -n <NAMESPACE>

istio 的几种资源类型

Istio 提供了多种自定义资源类型 (Custom Resource Definitions, CRDs) 以实现其功能。这些资源类型分为以下几类:流量管理、安全性、策略、遥测等。下面列举了一些主要的 Istio 资源类型以及相应示例:

  1. VirtualService(虚拟服务):用于配置流量路由规则,可以将流量导向不同的服务或子集。

    示例:

    apiVersion: networking.istio.io/v1alpha3
    kind: VirtualService
    metadata:
      name: my-virtual-service
    spec:
      hosts:
      - "example.com"
      http:
      - route:
        - destination:
            host: example-service
            subset: v1
  2. DestinationRule(目标规则):定义访问某服务时应用的负载均衡策略、连接池设置和异常检测。

    示例:

    apiVersion: networking.istio.io/v1alpha3
    kind: DestinationRule
    metadata:
      name: my-destination-rule
    spec:
      host: example-service
      subsets:
      - name: v1
        labels:
          version: v1
      trafficPolicy:
        loadBalancer:
          simple: LEAST_CONN
  3. Gateway(网关):配置 Ingress 和 Egress 流量的入口点,开放特定的端口、协议和主机名。

    示例:

    apiVersion: networking.istio.io/v1alpha3
    kind: Gateway
    metadata:
      name: my-gateway
    spec:
      selector:
        istio: ingressgateway
      servers:
      - port:
          number: 80
          name: http
          protocol: HTTP
        hosts:
        - "example.com"
  4. PeerAuthentication(对等认证):配置服务间通信的双向 TLS 认证设置。

    示例:

    apiVersion: security.istio.io/v1beta1
    kind: PeerAuthentication
    metadata:
       name: default
    spec:
       mtls:
         mode: STRICT
  5. AuthorizationPolicy(授权策略):定义基于特定条件的访问授权策略。

    示例:

    apiVersion: security.istio.io/v1beta1
    kind: AuthorizationPolicy
    metadata:
      name: my-authz-policy
    spec:
      selector:
        matchLabels:
          app: example-service
      action: ALLOW
      rules:
      - from:
        - source:
            namespaces: ["trusted-namespace"]

以上仅为 Istio 资源类型的几个示例,您可以通过查阅官方文档了解更多资源类型及用途:https://istio.io/latest/docs/reference/config/

流量走向

  1. 客户端发起请求,将流量导向到某个服务。
  2. 流量首先会被 Istio Gateway 捕获(如果请求来自外部)。Gateway 作为 Ingress 控制点,根据配置的规则,允许或拒绝特定的主机、端口和协议。
  3. 通过 Gateway 后,流量进入到 Ingress Envoy Sidecar。Envoy Sidecar 是一个轻量级代理,负责处理所有进出服务的流量。
  4. 根据 VirtualService 规则,流量将被路由至相应的目标服务。VirtualService 可以指定多种复杂的路由策略,如权重分配、版本控制等。
  5. 根据 DestinationRule,流量将被发送到相应的 Pod 和服务实例。DestinationRule 可以定义负载均衡策略、连接池设置和异常检测。
  6. 请求到达目标服务的 Envoy Sidecar。Sidecar 在转发请求给服务前,会根据 PeerAuthentication 和 AuthorizationPolicy 等安全策略执行身份验证和访问授权操作。
  7. 最后,请求到达目标服务,并得到响应。响应再按照类似的路径返回给客户端。

注意,以上流程描述了 Ingress 流量。Egress 流量(从集群向外部服务的请求)也遵循类似的逻辑,但是需要配置 Egress Gateway。在整个过程中,Istio 还会收集遥测数据、度量指标和日志信息,有助于监控和排查问题。


文章作者: theing
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 theing !
评论
 本篇
istio istio
听说过 istio 但是一直没有怎么使用过。
2023-05-04 theing
下一篇 
sed工具 常用命令 sed工具 常用命令
当使用sed工具时,可以通过传递一些命令来指定文本编辑操作
2023-05-04 theing
  目录