Estou tentando tornar minha API do servidor mestre mais segura para evitar a passagem de solicitações não https.
Amostra de configuração:
$ 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
O que funciona desde que eu esteja usando as CAs corretas.
Meu problema é que também funciona se eu remover as CAs ou tiver CAs incorretas e simplesmente aplicar o sinalizador --insecure-skip-tls-verify
.
Como posso forçar o servidor a permitir conexões https em vez de http na API do servidor?
Também desativei solicitações anônimasSolicitações anônimasmas ainda posso ver que as solicitações podem passar.
Responder1
Meu problema é que também funciona se eu remover as CAs ou se tiver CAs incorretas e simplesmente aplicar o sinalizador --insecure-skip-tls-verify.
Usar --insecure-skip-tls-verify
é altamenteNÃO RECOMENDADOem ambiente de produção. Pode ser usado quando você deseja fazer alguns testes locais ou para fins de aprendizagem.
EmKubectldocumentação você tem informações:
--insecure-skip-tls-verify
If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure
Portanto, se este sinalizador for definido como verdadeiro, ele sempre ignorará os certificados e a identidade do servidor não será verificada. É semelhante acurl -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.
Você pode proteger seu cluster de várias maneiras, mas isso depende do cenário. No entanto, existem alguns principaisPortas e IPs do servidor APIconceitos:
Usar SecurePort
Por padrão, o servidor API Kubernetes atende HTTP
em 2 portas:
localhost port:
- destina-se a testes e bootstrap, e para outros componentes do nó mestre (agendador, gerenciador de controlador) se comunicarem com a API
- sem TLS
- Desative conexões http inseguras: o padrão é a porta 8080, altere com
--insecure-port
sinalizador. (Pode ser desativado por--insecure-port=0
)- O IP padrão é
localhost
, mude com--insecure-bind-address
sinalizador. (Remover--insecure-bind-address
)- request ignora módulos de autenticação e autorização.
- solicitação tratada pelo(s) módulo(s) de controle de admissão.
- protegido pela necessidade de ter acesso ao host
Secure port:
- use sempre que possível Habilite a porta segura:
- usa TLS. Defina o certificado com
--tls-cert-file
e a chave com--tls-private-key-file
o sinalizador.- o padrão é port
6443
, mude com-secure-port
o sinalizador -.- O IP padrão é a primeira
non-localhost
interface de rede, altere com--bind-address
sinalizador.- solicitação tratada pelos módulos de autenticação e autorização.
- solicitação tratada pelo(s) módulo(s) de controle de admissão.
- módulos de autenticação e autorização são executados.
Restringir o acesso à API, o que significa que você deve permitir acesso à sua API apenas de um IP específico ou de um intervalo de IP específico (redes autorizadas). Não deveria ser acessível de fora do mundo. Para fazer isso, você pode usar regras de firewall ouPolítica de Rede.
DesligarSolicitações anônimas, o que você já fez.
Você pode pesquisar --insecure-port=0
, mas ele deve estar obsoleto em versões mais recentes.
Como informação adicional, aconselho você a verificarKubernetes da maneira mais difícil, especialmente 3 capítulos:
Provisioning Compute Resources
, Provisioning the CA and Generating TLS Certificates
, Generating Kubernetes Configuration Files for Authentication
. Você pode encontrar algumas práticas recomendadas.
Muito boa explicação das Kube API-server
bandeiras que você pode encontrar emEste artigo
Links úteis sobre segurança de cluster:
Os princípios básicos para manter clusters Kubernetes seguros – Como proteger o kube-apiserver
Controlando o acesso à API Kubernetes
Práticas recomendadas de segurança do Kubernetes
Segurança do Kubernetes 101: riscos e 29 práticas recomendadas