Установите правила брандмауэра хост-узла с сетевой политикой Calico

облачные вычисления
Установите правила брандмауэра хост-узла с сетевой политикой Calico

Служба Cloudpods работает в кластере Kubernetes, а сетевая схема кластера Kubernetes принимаетCalico. Таким образом, правила iptables для узлов, на которых работает служба Cloudpods, берет на себя Calico. В результате правила брандмауэра, которые мы настроили на сервисном узле Cloudpods, будут перезаписаны правилами iptables, настроенными Calico, в результате чего правила брандмауэра не вступят в силу. В этой статье описывается, как использовать HostEndpoint и GlobalNetworkPolicy Calico для установки правил брандмауэра для хост-узлов.

1. Подготовьте инструмент calicoctl

скачать двоичный файл

curl -O -L https://github.com/projectcalico/calicoctl/releases/download/v3.12.1/calicoctl
chmod +x calicoctl

Установить переменные среды

export DATASTORE_TYPE=kubernetes
export KUBECONFIG=/etc/kubernetes/admin.conf

2. Настройте правила HostEndpoint

Для каждого интерфейса каждого хоста, который должен управлять правилом брандмауэра, определите соответствующее правило HostEndpoint.

- apiVersion: projectcalico.org/v3
  kind: HostEndpoint
  metadata:
    name: <node_name>-<interface_name>
    labels:
      role: master
      env: production
  spec:
    interfaceName: <interface_name>
    node: <node_name>
    expectedIPs: ["<interface_ip>"]
- apiVersion: projectcalico.org/v3
  kind: HostEndpoint
  metadata:
    name: <node_name>-<interface_name>
    labels:
      role: master
      env: production
  spec:
    interfaceName: <interface_name>
    node: <node_name>
    expectedIPs: ["<interface_ip>"]

Примените правило:

./calicoctl apply -f hep.yaml

3. Определите сетевые правила

После определения HostEndpoint используйте GlobalNetworkPolicy Calico для определения правил брандмауэра.

- apiVersion: projectcalico.org/v3
  kind: GlobalNetworkPolicy
  metadata:
    name: <whitelist_gnp_name>
  spec:
    order: 10
    preDNAT: true
    applyOnForward: true
    ingress:
      - action: Allow
        protocol: TCP
        source:
          nets: [<src_net_block1>, <src_net_block2>]
        destination:
          ports: [<dst_port1>, <dst_port2>]
    selector: "role=="master""
- apiVersion: projectcalico.org/v3
  kind: GlobalNetworkPolicy
  metadata:
    name: drop-other-ingress
  spec:
    order: 20
    preDNAT: true
    applyOnForward: true
    ingress:
      - action: Deny
    selector: "role=="master""

Применить правила

./calicoctl apply -f gnp.yaml

4. отказоустойчивый механизм

Чтобы предотвратить риск того, что узел не сможет получить доступ к сети из-за неправильной настройки пользователя, в calico разработан механизм отказоустойчивости, то есть, если пользователь напишет неправильные правила, некоторые порты не будут заблокированы, что приведет к отказу узла функция. Вот информация для порта FailSafe:docs.project calico.org/reference/… также…

5. Пример конфигурации

Например: внешний сетевой порт главного узла разрешает только порты 80 и 443, а все остальные запрещены:

Определение HostEndpoint:

- apiVersion: projectcalico.org/v3
  kind: HostEndpoint
  metadata:
    name: master1-em4
    labels:
      role: master
      type: external
  spec:
    interfaceName: em4
    node: master1
    expectedIPs: ["120.133.60.219"]
- apiVersion: projectcalico.org/v3
  kind: HostEndpoint
  metadata:
    name: master2-em4
    labels:
      role: master
      type: external
  spec:
    interfaceName: em4
    node: master2
    expectedIPs: ["120.133.60.220"]
- apiVersion: projectcalico.org/v3
  kind: HostEndpoint
  metadata:
    name: master3-em4
    labels:
      role: master
      type: external
  spec:
    interfaceName: em4
    node: master3
    expectedIPs: ["120.133.60.221"]

Глобалнетворкполисидефинитион

- apiVersion: projectcalico.org/v3
  kind: GlobalNetworkPolicy
  metadata:
    name: allow-http-https-traffic-only
  spec:
    order: 10
    preDNAT: true
    applyOnForward: true
    ingress:
      - action: Allow
        protocol: TCP
        destination:
          ports: [80,443]
    selector: "role=="master" && type=="external""
- apiVersion: projectcalico.org/v3
  kind: GlobalNetworkPolicy
  metadata:
    name: drop-other-ingress
  spec:
    order: 20
    preDNAT: true
    applyOnForward: true
    ingress:
      - action: Deny