【问题标题】:Using Istio to block incoming connections from ANY to a service使用 Istio 阻止从 ANY 到服务的传入连接
【发布时间】:2018-02-23 15:46:15
【问题描述】:

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

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

Mixer - 拒绝或列表 Pilot - route-rules - 例如注入中止故障(400)或destination-policy - 例如断路(最大连接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 没有配置类型,类型是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: Method Not Allowed 错误:服务器不允许在 请求的资源

谢谢

【问题讨论】:

    标签: mixer policies istio


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

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

          这样你就得到了两层保护:

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

          1. 即使互联网流量确实以某种方式访问​​了您的服务,该流量也会被拒绝,因为它不提供 istio 服务 CERT/由您的 istio CA 签名

          【讨论】:

          • 上述两种方法都适用于某些环境或设置。我目前正在寻求应用“临时”技术来使用已部署的环境动态应用块,该环境不容易添加新功能(除非已经部署)。
          • 当您知道谁是您的客户或服务激活使用时,Istio 身份验证方法将是完美的。当您想广泛公开您的服务时,身份验证将不适合。
          • 要广泛公开您的服务,您可以为要公开的服务添加一个入口,并在其上设置 Istio 混合器规则以限制访问
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-10-29
          • 1970-01-01
          • 2010-09-08
          • 1970-01-01
          • 2021-05-15
          • 2014-11-27
          • 1970-01-01
          相关资源
          最近更新 更多