对 K8s 服务所在的位置以及 Istio 的 Envoy 代理所在的位置感到困惑?

Confused about where K8s Services reside and where Istio's Envoy Proxy Reside?

我很困惑 k8s 常规服务和 istio 的 sidecar 在哪里。

我最近了解了 istio 及其在 pod 中的 "sidecar/envoy/proxy"。而且我有信心说 Istio 的边车位于 pod 内。但是,k8s 常规服务位于何处以及首先从应用程序、服务或 Proxy/Sidecar?

联系谁?

我脑海中的图是这样的:

Services 是内部抽象 REST 对象,如:loadbalancer、clusterip、nodeport 等。它们的定义存储在 Kubernetes API 服务器(etcd)中。

服务通常由 Kube-proxy 实现,也通过匹配选择器和标签分配给端点。

每个节点都是 运行 由 etcd 管理的 kube-proxy 实例。服务大部分时间存储为 iptables 中的规则集。


服务网格中使用的 Istio 服务位于 Istio 控制平面中,可用作网关、出口、入口、虚拟服务等对象。

istio 控制平面还包括: Citadel:用于密钥和证书管理 Pilot:向代理分发身份验证策略和安全命名信息 Mixer:管理授权和审计

正如您提到的,sidecar 代理(envoy 代理)被注入到应用程序容器旁边的 pods 中。

这是来自 istio documentation 的图表。

K8s服务是iptable规则。您可以通过 ssh-ing 进入节点并 运行:

来获取它们

sudo iptables-save | grep YOUR_SERVICE_NAME

Istio sidecar 容器是一个 Envoy 代理。我不知道你想用它做什么,但你可以这样做:

  • 正在访问一个 Envoy 代理容器:

kubectl exec -it YOUR_POD_NAME -c istio-proxy sh

  • 获取它的日志:

kubectl logs YOUR_POD_NAME -c istio-proxy

等等等等