使用 RBAC (Envoy) 允许 IP 与 TCP 侦听器

Allow IPs with TCP Listener using RBAC (Envoy)

我正在尝试使用 Envoy 实现以下目标:

这是我的监听器设置。

    - name: listener_postgres
      address:
        socket_address:
          protocol: TCP
          address: 0.0.0.0
          port_value: 54322
      filter_chains:
        filters:
          - name: envoy.filters.network.rbac
            config:
              stat_prefix: rbac_postgres
              rules:
                action: ALLOW
                policies:
                  "allow":
                    permissions:
                      - any: true
                    principals:
                      - source_ip:
                          address_prefix: XX.XX.XX.XX
                          prefix_len: 32
                      - source_ip:
                          address_prefix: XX.XX.XX.XX
                          prefix_len: 32
                      - source_ip:
                          address_prefix: XX.XX.XX.XX
                          prefix_len: 32
          - name: envoy.tcp_proxy
            config:
              stat_prefix: tcp_postgres
              cluster: database_service

我可以确认服务设置正确,因为我可以删除 RBAC 规则并且可以成功连接。

添加 RBAC 规则后,我无法连接到 Postgres 数据库。

但由于某种原因似乎没有任何效果,我也尝试用 remote_ip 和 direct_remote_ip 代替 source_ip。

我是不是做错了什么?

谢谢

嘿,我 运行 遇到了同样的问题,这是适合我的配置。 我使用了 remote_ip 属性。 另外,检查更新的过滤器名称

- name: listener_postgres
      address:
        socket_address:
          protocol: TCP
          address: 0.0.0.0
          port_value: 54322
      filter_chains:
        filters:
          - name: envoy_rbac
            config:
              stat_prefix: rbac_postgres
              rules:
                action: ALLOW
                policies:
                  "allow":
                    permissions:
                      - any: true
                    principals:
                      - remote_ip:
                          address_prefix: XX.XX.XX.XX
                          prefix_len: 32
          - name: envoy_tcp_proxy
            config:
              stat_prefix: tcp_postgres
              cluster: database_service

似乎按照 Rahul Pratap 的建议将属性设置为“remote_ip”。

这是一个工作示例

    - name: listener_postgres
      address:
        socket_address:
          protocol: TCP
          address: 0.0.0.0
          port_value: 54322
      filter_chains:
        filters:
          - name: envoy.filters.network.rbac
            config:
              stat_prefix: rbac_postgres
              rules:
                action: ALLOW
                policies:
                  "allow":
                    permissions:
                      - any: true
                    principals:
                      - remote_ip:
                          address_prefix: XX.XX.XX.XX
                          prefix_len: 32
          - name: envoy.tcp_proxy
            config:
              stat_prefix: tcp_postgres
              cluster: database_service