1

试图找到使用 Istio 阻止从 Internet 到 k8s 服务的任何连接的最佳方法。

Istio 策略中的最佳选择是什么?

Mixer - 拒绝或列出 Pilot - 路由规则 - 例如注入中止故障 (400) 或目标策略 - 例如断路(最大连接 0???)

尝试了以上所有方法,但没有任何效果,其中很少有配置不是很直观(并且没有充分记录)。

感谢是否会附上一个工作示例

以下是注入 HTTP 故障策略的示例。

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

首先,Ist​​io 要求一个“类型”:

错误:Istio 没有配置类型,类型为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] 响应正文:405:方法不允许错误:服务器不允许在请求的资源上使用此方法

谢谢

4

4 回答 4

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

于 2017-09-15T13:54:52.720 回答
0

最简单的方法应该是打开 istio auth 并且在您的配置中没有入口。

这样您就可以获得两层保护:

  1. 您的服务不可路由(没有外部 IP)

  1. 即使互联网流量确实以某种方式设法访问您的服务,流量也会被拒绝,因为它不提供 istio 服务 CERT/由您的 istio CA 签名
于 2017-09-14T23:19:48.000 回答
0

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

这本身就是应该进一步调查的事情,因为它没有任何意义。

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

于 2017-09-17T14:58:16.953 回答
0

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

于 2017-09-18T16:12:43.160 回答