我正在编写一个服务来协调“复制控制平面”配置中的 Istio 控制平面。我已经设法以编程方式创建了ServiceEntry
在集群之间正确路由的对象 - 多集群路由效果很好!甚至无需任何额外配置即可在集群之间正确进行故障转移。我的应用程序创建的服务条目示例如下:
apiVersion: networking.istio.io/v1beta1
kind: ServiceEntry
metadata:
name: httpbin-no-proxy.httpbin
namespace: my-app
spec:
addresses:
- 245.0.0.1
endpoints:
# Some remote cluster ingress
- address: 172.18.0.3
labels:
app: httpbin
my-app/managed: cluster-1
identity: httpbin
ports:
http: 15443
- address: httpbin-no-proxy.httpbin.svc.cluster.local
labels:
app: httpbin-no-proxy
my-app/managed: cluster-2
identity: httpbin
ports:
http: 8000
hosts:
- httpbin-no-proxy.httpbin.global
location: MESH_INTERNAL
ports:
- name: http
number: 8000
protocol: http
resolution: DNS
但是...为了更容易地加入服务,我想为客户端/服务器位于不同集群中且服务器尚未注入 istio 的服务对启用此功能。
这并不是开箱即用的(无论是集群内还是集群外),因为ServiceEntry
在服务器集群中满足必要条件的情况下,Istio 不会在入口网关处终止 mTLS——服务接收加密流量!
在我的集群中,我可以配置终止边车使用目标规则,如下所示:
apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
name: httpbin-no-proxy.httpbin
spec:
host: httpbin-no-proxy.httpbin.global
trafficPolicy:
outlierDetection:
baseEjectionTime: 120s
consecutiveErrors: 10
interval: 5s
minHealthPercent: 49
tls:
mode: DISABLE
这使得.global
工作在服务器集群内部进行——来自服务器集群中带有 sidecar 的 pod 的流量在到达服务器时不再加密。但这在遍历入口网关时不会生效,即使我DestinationRule
在istio-system
或istio-config
命名空间中创建。
是什么让入口代理实例变得特殊,以及如何让入口网关以纯文本形式连接到上游(服务器)?