工作负载条目

WorkloadEntry 使操作员能够描述单个非 Kubernetes 工作负载(例如虚拟机或裸机服务器)在加入网格时的属性。WorkloadEntry 必须与 Istio ServiceEntry 结合使用,该条目通过相应的标签选择工作负载,并为MESH_INTERNAL服务(主机名、端口属性等)提供服务定义。ServiceEntry 对象可以选择多个工作负载条目以及基于服务条目中指定的标签选择器的 Kubernetes Pod。

当工作负载连接到istiod时,自定义资源中的状态字段将更新以指示工作负载的健康状况以及其他详细信息,类似于 Kubernetes 如何更新 Pod 的状态。

以下示例声明了一个工作负载条目,该条目表示details.bookinfo.com服务的虚拟机。此虚拟机已安装 sidecar 并使用details-legacy服务帐户引导。该服务在端口 80 上向网格中的应用程序公开。到此服务的 HTTP 流量包装在 Istio 双向 TLS 中,并发送到目标端口 8080 上虚拟机上的 sidecar,然后 sidecar 将其转发到同一端口上的 localhost 上的应用程序。

apiVersion: networking.istio.io/v1
kind: WorkloadEntry
metadata:
  name: details-svc
spec:
  # use of the service account indicates that the workload has a
  # sidecar proxy bootstrapped with this service account. Pods with
  # sidecars will automatically communicate with the workload using
  # istio mutual TLS.
  serviceAccount: details-legacy
  address: 2.2.2.2
  labels:
    app: details-legacy
    instance-id: vm1

以及关联的服务条目

apiVersion: networking.istio.io/v1
kind: ServiceEntry
metadata:
  name: details-svc
spec:
  hosts:
  - details.bookinfo.com
  location: MESH_INTERNAL
  ports:
  - number: 80
    name: http
    protocol: HTTP
    targetPort: 8080
  resolution: STATIC
  workloadSelector:
    labels:
      app: details-legacy

以下示例使用其完全限定的 DNS 名称声明相同的 VM 工作负载。服务条目的解析模式应更改为 DNS,以指示客户端 sidecar 应在转发请求之前在运行时动态解析 DNS 名称。

apiVersion: networking.istio.io/v1
kind: WorkloadEntry
metadata:
  name: details-svc
spec:
  # use of the service account indicates that the workload has a
  # sidecar proxy bootstrapped with this service account. Pods with
  # sidecars will automatically communicate with the workload using
  # istio mutual TLS.
  serviceAccount: details-legacy
  address: vm1.vpc01.corp.net
  labels:
    app: details-legacy
    instance-id: vm1

以及关联的服务条目

apiVersion: networking.istio.io/v1
kind: ServiceEntry
metadata:
  name: details-svc
spec:
  hosts:
  - details.bookinfo.com
  location: MESH_INTERNAL
  ports:
  - number: 80
    name: http
    protocol: HTTP
    targetPort: 8080
  resolution: DNS
  workloadSelector:
    labels:
      app: details-legacy

以下示例声明了一个没有地址的 VM 工作负载。除了让 istiod 从远程 API 服务器读取之外,还可以编写本地集群中的WorkloadEntry,该条目表示远程网络中具有给定标签的工作负载。单个带有权重的WorkloadEntry表示给定远程网络中所有实际工作负载的聚合。

apiVersion: networking.istio.io/v1
kind: WorkloadEntry
metadata:
  name: foo-workloads-cluster-2
spec:
  serviceAccount: foo
  network: cluster-2-network
  labels:
    app: foo

WorkloadEntry

WorkloadEntry 允许指定单个非 Kubernetes 工作负载(例如 VM 或裸机服务)的属性,服务条目可以引用这些属性。

字段类型描述必填
address字符串

与网络端点关联的地址,不含端口。如果且仅当解析设置为 DNS 时,才能使用域名,并且必须是完全限定的,不包含通配符。对于 Unix 域套接字端点,使用表单 unix:///absolute/path/to/socket。如果 address 为空,则必须指定 network。

portsmap<string, uint32>

与端点关联的一组端口。如果指定了端口映射,则它必须是 servicePortName 到此端点端口的映射,以便到服务端口的流量将转发到映射到服务 portName 的端点端口。如果省略,并且 targetPort 指定为服务端口规范的一部分,则到服务端口的流量将转发到指定targetPort上的端点之一。如果 targetPort 和端点端口映射均未指定,则到服务端口的流量将转发到同一端口上的端点之一。

注意 1:不要用于unix://地址。

注意 2:端点端口映射优先于 targetPort。

labelsmap<string, string>

与端点关联的一个或多个标签。

network字符串

Network 使 Istio 能够对驻留在相同 L3 域/网络中的端点进行分组。假设同一网络中的所有端点都可以直接相互访问。当不同网络中的端点无法直接相互访问时,可以使用 Istio 网关来建立连接(通常在网关服务器中使用AUTO_PASSTHROUGH模式)。这是一种高级配置,通常用于跨多个集群扩展 Istio 网格。如果未提供 address,则必填。

locality字符串

与端点关联的区域。区域对应于故障域(例如,国家/地区/区域)。可以通过使用 / 分隔每个封装故障域来表示任意故障域层次结构。例如,位于美国、美国东部 1 区域、可用区 az-1、数据中心机架 r11 中的端点的区域可以表示为 us/us-east-1/az-1/r11。Istio 将配置 sidecar 以路由到与 sidecar 相同区域中的端点。如果区域中没有端点可用,则将选择父区域(但在同一网络 ID 内)中的端点。例如,如果同一网络(networkID“n1”)中有两个端点,例如区域为 us/us-east-1/az-1/r11 的 e1 和区域为 us/us-east-1/az-2/r12 的 e2,来自 us/us-east-1/az-1/r11 区域的 sidecar 将优先选择来自同一区域的 e1,而不是来自不同区域的 e2。端点 e2 可以是与网关关联的 IP(桥接网络 n1 和 n2),也可以是与标准服务端点关联的 IP。

weightuint32

与端点关联的负载均衡权重。权重较高的端点将接收比例更高的流量。

serviceAccount字符串

如果工作负载中存在 sidecar,则与工作负载关联的服务帐户。服务帐户必须存在于与配置(WorkloadEntry 或 ServiceEntry)相同的命名空间中。

这些信息是否有用?
您是否有任何改进建议?

感谢您的反馈!