Контроль доступа#

Ниже приведен пример развертывания веб-приложения, настройки балансировки нагрузки с помощью VirtualServer и применения политики управления доступом для запрета и разрешения трафика из определенной подсети.

Предварительные действия#

  1. Установите ANIC.

  2. Сохраните публичный IP-адрес ANIC в переменной оболочки:

    $ IC_IP=XXX.YYY.ZZZ.III
    
  3. Сохраните HTTP-порт ANIC в переменной оболочки:

    $ IC_HTTP_PORT=<номер порта>
    

Настройка контроля доступа#

  1. Создайте Deployment и Service для приложения:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: webapp
    spec:
      selector:
        matchLabels:
          app: webapp
      template:
        metadata:
          labels:
            app: webapp
        spec:
          containers:
          - name: webapp
            image: angiesoftware/angie-hello:plain-text
            ports:
            - containerPort: 8080
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: webapp-svc
    spec:
      ports:
      - port: 80
        targetPort: 8080
        protocol: TCP
        name: http
      selector:
        app: webapp
    

    Примените настройки:

    $ kubectl apply -f webapp.yaml
    
  2. Создайте политику webapp-policy, которая запрещает запросы от клиентов с IP-адресами из подсети 10.0.0.0/8. Убедитесь, что поле deny в файле access-control-policy-deny.yaml настроено в соответствии с вашей средой:

    apiVersion: k8s.angie.software/v1
    kind: Policy
    metadata:
      name: webapp-policy
    spec:
      accessControl:
        deny:
        - 10.0.0.0/8
    

    Примените настройки:

    $ kubectl apply -f access-control-policy-deny.yaml
    
  3. Создайте ресурс VirtualServer для веб-приложения:

    apiVersion: k8s.angie.software/v1
    kind: VirtualServer
    metadata:
      name: webapp
    spec:
      host: webapp.example.com
      policies:
      - name: webapp-policy
      upstreams:
      - name: webapp
        service: webapp-svc
        port: 80
      routes:
      - path: /
        action:
          pass: webapp
    

    Примените настройки:

    $ kubectl apply -f virtual-server.yaml
    

    Обратите внимание, что VirtualServer должен ссылаться на политику webapp-policy, созданную на шаге 2.

  4. Протестируйте конфигурацию.

    Попробуйте обратиться к приложению:

    $ curl --resolve webapp.example.com:$IC_HTTP_PORT:$IC_IP http://webapp.example.com:$IC_HTTP_PORT
    

    Ожидаемый результат:

    <html>
    <head><title>403 Forbidden</title></head>
    <body>
    <center><h1>403 Forbidden</h1></center>
    <hr><center>Angie/1.8.1</center>
    </body>
    </html>
    

    Ответ 403 Forbidden означает успешное срабатывание политики блокировки запросов.

  5. Обновите политику, чтобы разрешить запросы от клиентов из подсети 10.0.0.0/8. Убедитесь, что поле allow в файле access-control-policy-allow.yaml настроено в соответствии с вашей средой:

    apiVersion: k8s.angie.software/v1
    kind: Policy
    metadata:
      name: webapp-policy
    spec:
      accessControl:
        allow:
        - 10.0.0.0/8
    

    Обновите политику:

    $ kubectl apply -f access-control-policy-allow.yaml
    
  6. Повторно протестируйте конфигурацию.

    Попробуйте обратиться к приложению:

    $ curl --resolve webapp.example.com:$IC_HTTP_PORT:$IC_IP http://webapp.example.com:$IC_HTTP_PORT
    

    Ожидаемый результат:

    Server address: 10.64.0.13:8080
    Server name: webapp-5cbbc7bd78-wf85w
    

    Ответ 200 OK означает успешное разрешение запроса после обновления политики.