使用 Istio 阻止从 ANY 到服务的传入连接
Using Istio to block incoming connections from ANY to a service
尝试找到使用 Istio 阻止从互联网到 k8s 服务的任何连接的最佳方法。
Istio 策略的最佳选择是什么?
Mixer - 拒绝或列表
Pilot - 路由规则 - 例如注入中止故障 (400) 或目的地策略 - 例如断路(最大连接数 0???)
尝试了以上所有方法,但没有任何效果,而且其中一些配置不是很直观(并且没有很好的记录)。
感谢是否附上工作示例
下面是Injecting HTTP fault policy的例子。
destination: "ratings.default.svc.cluster.local"
route:
- tags:
version:
httpFault:
abort:
percent: 100
httpStatus: 400
httpStatus: 400
首先,Istio 要求一个“类型”:
Error: Istio doesn't have configuration type , the types are destination-policy, ingress-rule, route-rule
手动添加类型后:
type: route-rule
destination: "ratings.default.svc.cluster.local"
route:
- tags:
version:
httpFault:
abort:
percent: 100
httpStatus: 400
大喊方法:
I0914 17:44:32.417839 1003 request.go:991] Response Body: 405:
Method Not Allowed Error: the server does not allow this method on the
requested resource
谢谢
最简单的方法应该是只启用 istio 身份验证并且在您的配置中没有入口。
这样您就可以获得 2 层保护:
- 您的服务不可路由(无外部 IP)
和
- 即使互联网流量以某种方式成功命中您的服务,该流量也会被拒绝,因为它不提供 istio 服务 CERT/signed 被您的 istio CA
如果您只是想阻止外部流量进入您的服务,那么路由规则(故障注入)不是正确的方法。您应该通过不将其暴露在您的入口来阻止它。 https://istio.io/v-0.1/docs/tasks/ingress.html
也就是说,您在尝试设置路由规则时遇到错误的原因是您的 yaml 格式错误。 istioctl coammand 期望的是这样的事情:
type: route-rule
name: ratings-block
spec:
destination: "ratings.default.svc.cluster.local"
route:
- tags:
version: v1
httpFault:
abort:
percent: 100
httpStatus: 400
发现 Istio 的路由规则仅适用于两个连接的端点(客户端 pod 和服务器 pod)都配备了 Envoys。
这本身就应该进一步调查,因为它没有任何意义。
来自集群外部的流量确实需要通过入口进行控制。
Istio 有一个 inside/outside 网格的概念。网格内部的每个服务都有一个边车代理,它们的流量受路由规则的约束。来自网格外部的所有东西都需要通过 Ingress。 Ingress 本身是一个网格服务(代理)。
尝试找到使用 Istio 阻止从互联网到 k8s 服务的任何连接的最佳方法。
Istio 策略的最佳选择是什么?
Mixer - 拒绝或列表 Pilot - 路由规则 - 例如注入中止故障 (400) 或目的地策略 - 例如断路(最大连接数 0???)
尝试了以上所有方法,但没有任何效果,而且其中一些配置不是很直观(并且没有很好的记录)。
感谢是否附上工作示例
下面是Injecting HTTP fault policy的例子。
destination: "ratings.default.svc.cluster.local"
route:
- tags:
version:
httpFault:
abort:
percent: 100
httpStatus: 400
httpStatus: 400
首先,Istio 要求一个“类型”:
Error: Istio doesn't have configuration type , the types are destination-policy, ingress-rule, route-rule
手动添加类型后:
type: route-rule
destination: "ratings.default.svc.cluster.local"
route:
- tags:
version:
httpFault:
abort:
percent: 100
httpStatus: 400
大喊方法:
I0914 17:44:32.417839 1003 request.go:991] Response Body: 405: Method Not Allowed Error: the server does not allow this method on the requested resource
谢谢
最简单的方法应该是只启用 istio 身份验证并且在您的配置中没有入口。
这样您就可以获得 2 层保护:
- 您的服务不可路由(无外部 IP)
和
- 即使互联网流量以某种方式成功命中您的服务,该流量也会被拒绝,因为它不提供 istio 服务 CERT/signed 被您的 istio CA
如果您只是想阻止外部流量进入您的服务,那么路由规则(故障注入)不是正确的方法。您应该通过不将其暴露在您的入口来阻止它。 https://istio.io/v-0.1/docs/tasks/ingress.html
也就是说,您在尝试设置路由规则时遇到错误的原因是您的 yaml 格式错误。 istioctl coammand 期望的是这样的事情:
type: route-rule
name: ratings-block
spec:
destination: "ratings.default.svc.cluster.local"
route:
- tags:
version: v1
httpFault:
abort:
percent: 100
httpStatus: 400
发现 Istio 的路由规则仅适用于两个连接的端点(客户端 pod 和服务器 pod)都配备了 Envoys。
这本身就应该进一步调查,因为它没有任何意义。
来自集群外部的流量确实需要通过入口进行控制。
Istio 有一个 inside/outside 网格的概念。网格内部的每个服务都有一个边车代理,它们的流量受路由规则的约束。来自网格外部的所有东西都需要通过 Ingress。 Ingress 本身是一个网格服务(代理)。