Kubernetes Istio授权政策规则问题

Kubernetes Istio授权政策规则问题,kubernetes,istio,Kubernetes,Istio,我一直在测试istio(1.6)授权策略,并希望确认以下内容: 我是否可以使用k8s服务名称,如下所示,其中httpbin.bar是部署/工作负载httpbin的服务名称: 我有以下规则;仅允许从foo命名空间中的服务帐户sleep访问httpbin.bar服务 我设置了2个服务httpbin.bar和私有httpbin.bar。我的假设是它会阻止访问privatehttpbin.bar,但事实并非如此。另一方面,我故意避免添加selector.matchLabels,因为据我所知,该规则只适用

我一直在测试istio(1.6)授权策略,并希望确认以下内容:

  • 我是否可以使用k8s服务名称,如下所示,其中
    httpbin.bar
    是部署/工作负载httpbin的服务名称:
  • 我有以下规则;仅允许从
    foo
    命名空间中的服务帐户
    sleep
    访问
    httpbin.bar
    服务
  • 我设置了2个服务<代码>httpbin.bar和
    私有httpbin.bar
    。我的假设是它会阻止访问privatehttpbin.bar,但事实并非如此。另一方面,我故意避免添加
    selector.matchLabels
    ,因为据我所知,该规则只适用于
    httpbin.bar

    文件规定:

    当至少有一个源、操作和条件与请求匹配时,就会发生匹配

    根据

    我解释说,和逻辑将应用于
    操作


    如果我能找出这可能不起作用的原因,或者我的理解需要纠正,我将不胜感激。

    在第一点上,您可以通过k8s服务名称指定主机名。因此,主机字段可以使用httpbin.bar

    关于第二点, 根据,

    授权策略范围(目标)由 “元数据/命名空间”和可选的“选择器”

    “元数据/命名空间”告诉策略应用的命名空间。如果设置 对于根命名空间,该策略应用于网格中的所有命名空间

    因此,授权策略
    白名单httpbin bar
    适用于命名空间
    foo
    中的工作负载。但是要授权的服务
    httpbin
    privatehttbin
    位于
    bar
    命名空间中。因此,您的授权策略不会限制对这些服务的访问

    如果工作负载没有允许策略,请允许请求

    上述条件使请求成为有效的请求


    希望这有帮助。

    在第一点上,您可以通过k8s服务名称指定主机名。因此,主机字段可以使用httpbin.bar

    关于第二点, 根据,

    授权策略范围(目标)由 “元数据/命名空间”和可选的“选择器”

    “元数据/命名空间”告诉策略应用的命名空间。如果设置 对于根命名空间,该策略应用于网格中的所有命名空间

    因此,授权策略
    白名单httpbin bar
    适用于命名空间
    foo
    中的工作负载。但是要授权的服务
    httpbin
    privatehttbin
    位于
    bar
    命名空间中。因此,您的授权策略不会限制对这些服务的访问

    如果工作负载没有允许策略,请允许请求

    上述条件使请求成为有效的请求


    希望这有帮助。

    对于您的
    授权策略
    对象,命名空间栏中有两条规则:

    • 允许来自
      foo
      命名空间的任何请求;使用服务帐户
      睡眠
      进行任何服务
    • 允许对
      httpbin
      服务的任何请求;从任何命名空间,使用任何服务帐户
    所以这是一个OR,你正在申请

    如果你想被应用;意思是允许来自命名空间
    foo
    和服务帐户
    sleep
    的任何请求与服务
    httpbin
    对话,在命名空间栏中,您需要应用以下规则:

    apiVersion: security.istio.io/v1beta1
    kind: AuthorizationPolicy
    metadata:
      name: whitelist-httpbin-bar
      namespace: bar
      rules:
      - from:
        - source:
            principals: ["cluster.local/ns/foo/sa/sleep"]
        to:                     # <- remove the dash (-) from here
        - operation:
            hosts: ["httpbin.bar"]
    
    apiVersion:security.istio.io/v1beta1 种类:授权政策 元数据: 名称:白名单httpbin栏 名称空间:bar 规则: -发件人: -资料来源: 主体:[“cluster.local/ns/foo/sa/sleep”]
    要:#使用
    AuthorizationPolicy
    对象,命名空间栏中有两条规则:

    • 允许来自
      foo
      命名空间的任何请求;使用服务帐户
      睡眠
      进行任何服务
    • 允许对
      httpbin
      服务的任何请求;从任何命名空间,使用任何服务帐户
    所以这是一个OR,你正在申请

    如果你想被应用;意思是允许来自命名空间
    foo
    和服务帐户
    sleep
    的任何请求与服务
    httpbin
    对话,在命名空间栏中,您需要应用以下规则:

    apiVersion: security.istio.io/v1beta1
    kind: AuthorizationPolicy
    metadata:
      name: whitelist-httpbin-bar
      namespace: bar
      rules:
      - from:
        - source:
            principals: ["cluster.local/ns/foo/sa/sleep"]
        to:                     # <- remove the dash (-) from here
        - operation:
            hosts: ["httpbin.bar"]
    
    apiVersion:security.istio.io/v1beta1 种类:授权政策 元数据: 名称:白名单httpbin栏 名称空间:bar 规则: -发件人: -资料来源: 主体:[“cluster.local/ns/foo/sa/sleep”]
    致:#感谢您确认Q1。在Q2上,名称空间实际上是
    bar
    。我错误地将它添加到这里,作为
    foo
    (我更新了问题)。如果我按照你所说的去做,它应该可以工作,但是我似乎只有在添加
    选择器。matchLabels
    以匹配
    httbin
    工作负载时,它才会阻止
    privatehttpin
    @kaizenCoder。很抱歉,我在第一点上可能错了。主机字段可以在其他资源中获取k8s值,但我不知道授权策略是否接受它。我认为您必须为用例指定工作负载选择器。感谢您确认Q1。在Q2上,名称空间实际上是
    bar
    。我错误地将它添加到这里,作为
    foo
    (我更新了问题)。如果我按照你所说的去做,它应该可以工作,但是我似乎只有在添加
    选择器。matchLabels
    以匹配
    httbin
    工作负载时,它才会阻止
    privatehttpin
    @kaizenCoder。很抱歉,我在第一点上可能错了。主机字段可以在其他资源中获取k8s值,但我不知道授权策略是否接受它。我认为您必须为使用ca指定工作负载选择器
    apiVersion: security.istio.io/v1beta1
    kind: AuthorizationPolicy
    metadata:
      name: whitelist-httpbin-bar
      namespace: bar
      rules:
      - from:
        - source:
            principals: ["cluster.local/ns/foo/sa/sleep"]
        to:                     # <- remove the dash (-) from here
        - operation:
            hosts: ["httpbin.bar"]