Kubernetes ServiceEntry与服务和端点

Kubernetes ServiceEntry与服务和端点,kubernetes,istio,Kubernetes,Istio,当我可以简单地创建服务(如果此服务是一组外部IP,则定义端点而不是选择器)时,使用服务条目的主要好处是什么。在这种情况下,我不能依赖服务?我想说的是中提到的关键好处,您可以配置流量路由、定义重试、超时、故障注入等 服务条目描述服务的属性(DNS名称、VIP、端口、协议、端点)。这些服务可能位于mesh外部(例如web API)或不属于平台服务注册中心的mesh内部服务(例如,一组虚拟机与Kubernetes中的服务对话) 您可以使用向Istio内部维护的服务注册表添加条目。添加服务条目后,特使

当我可以简单地创建
服务
(如果此服务是一组外部IP,则定义
端点
而不是
选择器
)时,使用
服务条目
的主要好处是什么。在这种情况下,我不能依赖
服务

我想说的是中提到的关键好处,您可以配置流量路由、定义重试、超时、故障注入等

服务条目描述服务的属性(DNS名称、VIP、端口、协议、端点)。这些服务可能位于mesh外部(例如web API)或不属于平台服务注册中心的mesh内部服务(例如,一组虚拟机与Kubernetes中的服务对话)


您可以使用向Istio内部维护的服务注册表添加条目。添加服务条目后,特使代理可以向服务发送流量,就像它是网格中的服务一样。配置服务条目允许您管理网格外运行的服务的流量,包括以下任务:

  • 为外部目的地(如API)重定向和转发流量 从web消费,或从旧版服务的流量 基础设施。
  • 为外部服务定义和策略 目的地。
  • 通过运行虚拟机(VM)中的mesh服务
  • 从逻辑上将不同群集的服务添加到网格,以 在Kubernetes上配置服务器。
您不需要为希望mesh服务使用的每个外部服务添加服务条目。默认情况下,Istio将特使代理配置为将请求传递到未知服务。但是,不能使用Istio功能来控制未在网格中注册的目的地的流量

以下示例mesh外部服务条目将ext-svc.example.com外部依赖项添加到Istio的服务注册表中:

您可以使用hosts字段指定外部资源。您可以完全限定它或使用带有通配符前缀的域名

您可以配置虚拟服务和目标规则,以更细粒度的方式控制服务条目的流量,就像为网格中的任何其他服务配置流量一样。例如,以下目标规则将流量路由配置为使用相互TLS来保护到我们使用服务条目配置的ext-svc.example.com外部服务的连接:

有关更多可能的配置选项,请参阅


只要我与Istio一起工作,我意识到Service+EndpointsServiceEntry的最大好处是,我可以在ServceEntry中指定
端点上的
标签
,并在其上构建
子集。

是用于定义Istio中具有一组端点的服务的API对象。ServiceEntry可以描述跨多个集群部署的服务(例如,第三方web API)或不属于平台服务注册中心的mesh内部服务(例如,与Kubernetes中的服务对话的一组VM)

ServiceEntry端点可以是IP地址或DNS名称。每个端点都可以用网络、位置和权重单独标记和标记,并允许ServiceEntry描述各种网络拓扑

特别是与K8s服务相比,您没有Istio功能(重试、超时、故障注入策略等)来正确控制未在mesh中注册的目的地的流量

Istio与Kubernetes的集成使用K8s SDK监视API服务器的服务创建和服务端点更新事件。通过使用此数据,Istio创建ServiceEntry对象(),此ServiceEntry用于更新Istio内部模型并生成数据平面(特使)的更新配置,具体来说,ServiceEntry创建并填充其端点

相关摘录自:

要填充自己的服务注册表,Istio将连接到服务 发现系统。例如,如果您已在 Kubernetes群集,然后Istio自动检测服务该集群中的端点。 Istio维护一个内部服务注册表,其中包含 服务及其对应的服务端点在 服务网Istio使用服务注册表生成 配置

Istio不提供服务发现,尽管大多数服务都是 通过反映 发现了基础平台的服务(Kubernetes,领事, 普通DNS)。还可以使用
服务条目配置


什么<代码>服务入口
=
服务
+
端点
?这完全没有道理。@suren,我的问题是关于为什么ServiceEntry!=服务+端点,因为这是我无法理解的,因为这是两个完全不同的对象。您可以使用
ServiceEntry
指定可以从mesh与哪些外部端点通话,而
Service
是用于内部流量的iptable规则。不可比较。@suren,但对于服务+终结点,我也可以指定外部终结点。。。从meshhttpbin与这样的服务对话是没有问题的,因为它是一个内部服务<代码>服务条目
用于外部端点。尝试创建任何容器(比如debian),并执行
apt get update
。除非您创建一个
ServiceEntry
并打开
*.debian.org
,否则它将失败。
apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
  name: svc-entry
spec:
  hosts:
  - ext-svc.example.com
  ports:
  - number: 443
    name: https
    protocol: HTTPS
  location: MESH_EXTERNAL
  resolution: DNS
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: ext-res-dr
spec:
  host: ext-svc.example.com
  trafficPolicy:
    tls:
      mode: MUTUAL
      clientCertificate: /etc/certs/myclientcert.pem
      privateKey: /etc/certs/client_private_key.pem
      caCertificates: /etc/certs/rootcacerts.pem