Как отключить небезопасное одобрение kubectl для kube apiserver

Как отключить небезопасное одобрение kubectl для kube apiserver

Я пытаюсь сделать свой Master Server-API более безопасным, чтобы не допустить прохождения не-http-запросов.

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

$ kubectl config view
apiVersion: v1
clusters:
- cluster:
    server: https://ip:6443
  name: kubernetes
contexts:
- context:
    cluster: kubernetes
    user: kubernetes-admin
  name: kubernetes-admin@kubernetes
current-context: kubernetes-admin@kubernetes
kind: Config
preferences: {}
users:
- name: kubernetes-admin
  user:
    client-certificate-data: REDACTED
    client-key-data: REDACTED
    token: REDACTED

Это работает, пока я использую правильные центры сертификации.

Моя проблема в том, что это также работает, если я удаляю CA или у меня есть неправильные CA и я просто применяю флаг --insecure-skip-tls-verify.

Как заставить сервер разрешить https-соединения вместо http в Server-API?

Я также отключил анонимные запросы.Анонимные запросыно я все равно вижу, что запросы могут быть выполнены.

решение1

Проблема в том, что это также работает, если я удаляю CA или у меня есть неправильные CA, и я просто применяю флаг --insecure-skip-tls-verify.

Использование --insecure-skip-tls-verifyоченьНЕ РЕКОМЕНДУЕТСЯв производственной среде. Его можно использовать, когда вы хотите провести локальные тесты или в учебных целях.

ВКубектлдокументация у вас есть информация:

--insecure-skip-tls-verify

If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure

Итак, если этот флаг будет установлен как true, он всегда будет пропускать сертификаты, а идентификация сервера вообще не будет проверяться. Это похоже наcurl -k

-k, --insecure
              (TLS) By default, every SSL connection curl makes is verified to
              The  server  connection  is verified by making sure the server's
              interface name, IP address or host name.

Вы можете защитить свой кластер многими способами, но это зависит от сценария. Однако есть некоторые основныеПорты и IP-адреса API-сервераконцепции:

Использовать SecurePort

По умолчанию сервер API Kubernetes обслуживает HTTP2 порта:

  1. localhost port:
  • предназначен для тестирования и начальной загрузки, а также для взаимодействия других компонентов главного узла (планировщика, контроллера-менеджера) с API
  • нет TLS
  • Отключить небезопасные http-соединения: по умолчанию это порт 8080, измените с помощью --insecure-portфлага. (Его можно отключить с помощью --insecure-port=0)
  • IP по умолчанию — localhost, измените с помощью --insecure-bind-addressфлага. (Удалить --insecure-bind-address)
  • запрос обходит модули аутентификации и авторизации.
  • запрос обрабатывается модулем(ями) контроля доступа.
  • защищено необходимостью иметь доступ к хосту
  1. Secure port:
  • используйте по возможности Включить безопасный порт:
  • использует TLS. Установите сертификат с --tls-cert-fileи ключ с --tls-private-key-fileфлагом.
  • по умолчанию - порт 6443, измените с помощью -secure-portфлага -.
  • IP по умолчанию — первый non-localhostсетевой интерфейс, измените с помощью --bind-addressфлага.
  • запрос обрабатывается модулями аутентификации и авторизации.
  • запрос обрабатывается модулем(ями) контроля доступа.
  • Запускаются модули аутентификации и авторизации.

Ограничить доступ к API, то есть вы должны разрешить доступ к вашему API только с определенного IP или определенного диапазона IP (авторизованные сети). Он не должен быть доступен извне. Для этого вы можете использовать правила брандмауэра илиСетевая политика.

ВыключатьАнонимные запросы, что вы уже сделали.

Вы можете рассмотреть --insecure-port=0, однако в новых версиях он должен быть объявлен устаревшим.

В качестве дополнительной информации я бы посоветовал вам проверитьKubernetes: трудный путь, особенно 3 главы: Provisioning Compute Resources, Provisioning the CA and Generating TLS Certificates, Generating Kubernetes Configuration Files for Authentication. Там вы можете найти некоторые передовые практики.

Очень хорошее объяснение флагов Kube API-serverвы можете найти вЭта статья

Полезные ссылки о безопасности кластера:

Основы обеспечения безопасности кластеров Kubernetes — как защитить kube-apiserver

Управление доступом к API Kubernetes

Лучшие практики безопасности Kubernetes

Безопасность Kubernetes 101: Риски и 29 лучших практик

Управление доступом к API Kubernetes

Доступ к кластерам

Связанный контент