跳转至

Config

目录

一、先决条件

1.命名的服务端口: Service 的端口必须命名。端口名键值对必须按以下格式:name: <protocol>[-<suffix>]。更多说明请参看协议选择。

2.Service 关联: 每个 Pod 必须至少属于一个 Kubernetes Service,不管这个 Pod 是否对外暴露端口。如果一个 Pod 同时属于多个 Kubernetes Service, 那么这些 Service 不能同时在一个端口号上使用不同的协议(比如:HTTP 和 TCP)。

3.带有 app 和 version 标签(label)的 Deployment: 我们建议显式地给 Deployment 加上 app 和 version 标签。给使用 Kubernetes Deployment 部署的 Pod 部署配置中增加这些标签,可以给 Istio 收集的指标和遥测信息中增加上下文信息。
    app 标签:每个部署配置应该有一个不同的 app 标签并且该标签的值应该有一定意义。app label 用于在分布式追踪中添加上下文信息。
    version 标签:这个标签用于在特定方式部署的应用中表示版本。

4.应用 UID: 确保你的 Pod 不会以用户 ID(UID)为 1337 的用户运行应用。

5.NET_ADMIN 功能: 如果你的集群执行 Pod 安全策略,必须给 Pod 配置 NET_ADMIN 功能。如果你使用 Istio CNI 插件 可以不配置。要了解更多 NET_ADMIN 功能的知识,请查看所需的 Pod 功能。

二、sidecar注入方式

1.自动注入
kubectl label namespace default istio-injection=enabled


2.手动注入
istioctl kube-inject -f test.yaml | kubectl apply -f -

三、流量对比

  • 由于服务网格对网络的管理有更加细粒度的配置,所以服务网格能够实现的功能也更加多样

四、配置

1.虚拟网关
- 虚拟网关用于配置网关pod接受到的流量,哪部分需要导入服务网格
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: dnet-int-gateway
spec:
  selector: # 通过标签选择 gateway pod
    istio: ingressgateway
  servers: # 定义导入网格的流量
  - port:
      number: 80
      name: http
      protocol: HTTP
    hosts:
    - "*.qianfan123.com"
  - port:
      number: 443
      name: https
      protocol: HTTPS
    hosts:
    - "*.qianfan123.com"
    tls: # 配置证书
      mode: SIMPLE
      credentialName: "qianfan123" # 使用 k8s secret

2.虚拟服务
- 虚拟服务管理虚拟网关导入的流量,将流量路由至service
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: cmdb-test--cmdb-rs
spec:
  hosts: # 管理使用这些域名的流量
  - cmdb-test.qianfan123.com
  - plat-dnet-integration-cmdb-rs
  gateways:
  - dnet-int-gatewaiy # 管理从这个虚拟网管进来的流量
  http:
  - match: # 匹配规则
    - uri:
        prefix: /cmdb-rs # url为cmdb-rs开头的
    route: # 路由规则
    - destination: # 目标
        host: plat-dnet-integration-cmdb-rs # 到这个service
        subset: v1 # 此处的配置为下方DR的 spec.subsets.name
        port:
          number: 8080 # 此处为容器接受流量的端口

3.目标规则
- 目标规则用于配置service收到的流量,并将其分配至后段的pod
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: cmdb-rs
spec:
  host: plat-dnet-integration-cmdb-rs # 管理从此service进来的流量
  subsets: # 配置子集
  - name: v1 # 子集名称
    labels: # 根据标签匹配pod 为当前子集的pod 是最终vs使用当前subset路由到的pod
      app: cmdb-rs
      version: v1