Я пытаюсь сделать свой 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 обслуживает HTTP
2 порта:
localhost port:
- предназначен для тестирования и начальной загрузки, а также для взаимодействия других компонентов главного узла (планировщика, контроллера-менеджера) с API
- нет TLS
- Отключить небезопасные http-соединения: по умолчанию это порт 8080, измените с помощью
--insecure-port
флага. (Его можно отключить с помощью--insecure-port=0
)- IP по умолчанию —
localhost
, измените с помощью--insecure-bind-address
флага. (Удалить--insecure-bind-address
)- запрос обходит модули аутентификации и авторизации.
- запрос обрабатывается модулем(ями) контроля доступа.
- защищено необходимостью иметь доступ к хосту
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 лучших практик