使用Istio阻止从ANY到服务的传入连接

时间:2017-09-14 15:16:53

标签: mixer policies istio

尝试使用Istio找到阻止从互联网连接到k8s服务的最佳方式。

Istio政策的最佳选择是什么?

混音器 - 拒绝或列表 试点 - 路由规则 - 例如注入中止故障(400)或目的地策略 - 例如电路中断(最大连接0 ???)

尝试了上述所有内容,但没有任何工作,其中很少一些配置不是很直观(并没有详细记录)。

欣赏是否附上工作示例

以下是Injecting HTTP fault policy的示例。

destination: "ratings.default.svc.cluster.local"
route:
- tags:
    version:
httpFault:
  abort:
    percent: 100
    httpStatus: 400
httpStatus: 400

首先,Ist​​io要求"类型":

  

错误:Istio没有配置类型,类型是目标策略,入口规则,路由规则

手动添加类型后:

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]回复正文:405:   方法不允许错误:服务器不允许此方法   请求的资源

由于

4 个答案:

答案 0 :(得分:2)

如果您只是想阻止服务的外部流量,那么路由规则(故障注入)不是正确的方法。你应该通过不将它暴露在你的入口中来阻止它。 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

请参阅此处的示例:https://istio.io/v-0.1/docs/tasks/request-routing.html

答案 1 :(得分:0)

最简单的方法应该是启用istio auth并且不要在配置中进入。

这样你获得了2层保护:

  1. 您的服务不可路由(无外部IP)
    1. 即使互联网流量以某种方式设法点击您的服务,流量也会被拒绝,因为它没有提供您的istio CA签署的istio服务CERT

答案 2 :(得分:0)

发现Istio的路由规则仅在两个连接的端点(客户端pod和服务器pod)配备了Envoys时才适用。

这本身就应该进一步研究,因为它没有任何意义。

来自集群外部的流量确实需要由入口控制。

答案 3 :(得分:0)

Istio具有网格内/外的概念。网状网内的每个服务都有一个边车代理,它们的流量受路由规则的约束。来自网格外部的所有东西都需要通过Ingress。 Ingress本身就是一个网状服务(代理)。