Использование сетевого фильтра RBAC для блокировки входа или выхода в / из службы в Envoy Proxy

Я хочу попробовать настроить фильтр в Envoy Proxy для блокировки входа и выхода в службу на основе некоторых IP-адресов, имени хоста, таблицы маршрутизации и т. Д.

Я искал документацию и вижу, что это возможно. Но не получил примеров его использования.

Может кто-нибудь указать на какой-нибудь пример того, как это можно сделать?

Я понял примерно следующее:

network_filters:
   - name: service-access
     config: 
        rules: 
           action: ALLOW
           policies:
             "service-access":
                 principals:
                    source_ip: 192.168.135.211
                 permissions:
                    - destination_ip: 0.0.0.0
                    - destination_port: 443

Но я не могу применить этот сетевой фильтр. Все конфигурации дают мне ошибку конфигурации.


person Ashu    schedule 25.09.2018    source источник


Ответы (2)


Я бы порекомендовал Istio. Вы можете настроить Rule, который будет запрещать весь трафик, исходящий не с 192.168.0.1 IP.

apiVersion: "config.istio.io/v1alpha2"
kind: denier
metadata:
  name: denyreviewsv3handler
spec:
  status:
    code: 7
    message: Not allowed
---
apiVersion: "config.istio.io/v1alpha2"
kind: checknothing
metadata:
  name: denyreviewsv3request
spec:
---
apiVersion: "config.istio.io/v1alpha2"
kind: rule
metadata:
  name: denyreviewsv3
spec:
  match: source.ip != ip("192.168.0.1")
  actions:
  - handler: denyreviewsv3handler.denier
    instances: [ denyreviewsv3request.checknothing ]

Вы можете сопоставить другие атрибуты, указанные в Словаре атрибутов , например, блок curl команда match: match(request.headers["user-agent"], "curl*")

Подробнее об управлении трафиком и Отказ и белый / черный список можно найти в Istio документация. Я также могу порекомендовать вам этот istio -shops, опубликованный szihai.

person Crou    schedule 26.09.2018
comment
Да, Istio - наиболее вероятное решение, но наш администратор кластера kubernetes не позволит установить Istio или любую другую сервисную сетку, такую ​​как Ambassador, Linkerd или аналогичные инструменты. - person Ashu; 26.09.2018
comment
Может быть, вместо использования envoy в вашем случае будет достаточно использования сетевой политики kubernetes? kubernetes.io/docs/concepts/services-networking/ - person Bal Chua; 28.09.2018

Это полная конфигурация фильтра rbac, предоставленная мне командой посланников в их выпуске на guthub. Хотя еще не проверял.

static_resources:
      listeners:
      - name: "ingress listener"
        address:
          socket_address:
            address: 0.0.0.0
            port_value: 9001
        filter_chains:
          filters:
          - name: envoy.http_connection_manager
            config:
              codec_type: auto
              stat_prefix: ingress_http
              route_config:
                name: local_route
                virtual_hosts:
                - name: local_service
                  domains:
                  - "*"
                  routes:
                  - match:
                      prefix: "/"  
                    route:
                      cluster: local_service
                    per_filter_config:
                      envoy.filters.http.rbac:
                        rbac:
                          rules:
                            action: ALLOW
                            policies:
                              "per-route-rule":
                                permissions:
                                - any: true
                                principals:
                                - any: true
              http_filters:
              - name: envoy.filters.http.rbac 
                config: 
                  rules: 
                    action: ALLOW
                    policies:
                      "general-rules":
                        permissions:
                        - any: true
                        principals:
                        - any: true
              - name: envoy.router
                config: {}
              access_log:
                name: envoy.file_access_log
                config: {path: /dev/stdout}

      clusters:
      - name: local_service
        connect_timeout: 0.250s
        type: static
        lb_policy: round_robin
        http2_protocol_options: {}
        hosts:
        - socket_address:
            address: 127.0.0.1
            port_value: 9000

    admin:
      access_log_path: "/dev/null"
      address:
        socket_address:
          address: 0.0.0.0
          port_value: 8080
person Ashu    schedule 01.10.2018