Estoy tratando de hacer que mi API de servidor maestro sea más segura para evitar permitir el paso de solicitudes que no sean https.
Muestra de configuración:
$ 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
Lo cual funciona siempre que utilice las CA correctas.
Mi problema es que también funciona si elimino las CA o tengo CA incorrectas y simplemente aplico la bandera --insecure-skip-tls-verify
.
¿Cómo puedo forzar al servidor a permitir conexiones https en lugar de http en la API del servidor?
También he desactivado las solicitudes anónimas.Solicitudes anónimaspero todavía puedo ver que las solicitudes pueden pasar.
Respuesta1
Mi problema es que también funciona si elimino las CA o tengo CA incorrectas y simplemente aplico el indicador --insecure-skip-tls-verify.
Usar --insecure-skip-tls-verify
es altamenteNO RECOMENDADOen el entorno de producción. Se puede utilizar cuando desee realizar algunas pruebas locales o con fines de aprendizaje.
EnKubectldocumentación tienes información:
--insecure-skip-tls-verify
If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure
Por lo tanto, si este indicador se establece como verdadero, siempre omitirá los certificados y no se verificará la identidad del servidor en absoluto. Es similar 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.
Puede proteger su clúster de muchas maneras, pero depende del escenario. Sin embargo, hay algunos principalesPuertos e IP del servidor APIconceptos:
Utilice puerto seguro
De forma predeterminada, el servidor API de Kubernetes funciona HTTP
en 2 puertos:
localhost port:
- está destinado a pruebas y arranque, y para que otros componentes del nodo maestro (programador, controlador-administrador) se comuniquen con la API
- sin TLS
- Deshabilite las conexiones http inseguras: el puerto predeterminado es 8080, cámbielo con
--insecure-port
la bandera. (Se puede desactivar mediante--insecure-port=0
)- La IP predeterminada es
localhost
, cámbiela con--insecure-bind-address
la bandera. (Eliminar--insecure-bind-address
)- La solicitud omite los módulos de autenticación y autorización.
- solicitud manejada por el(los) módulo(s) de control de admisión.
- protegido por la necesidad de tener acceso al host
Secure port:
- utilizar siempre que sea posible Habilitar puerto seguro:
- utiliza TLS. Establecer certificado con
--tls-cert-file
y clave con--tls-private-key-file
bandera.- El valor predeterminado es puerto
6443
, cámbielo con -flag-secure-port
.- La IP predeterminada es la primera
non-localhost
interfaz de red, cámbiela con--bind-address
la bandera.- Solicitud manejada por módulos de autenticación y autorización.
- solicitud manejada por el(los) módulo(s) de control de admisión.
- Se ejecutan los módulos de autenticación y autorización.
Restringir el acceso a la API, lo que significa que debe permitir el acceso a su API solo desde una IP específica o un rango de IP específico (redes autorizadas). No debería ser accesible desde el exterior del mundo. Para hacerlo, puede utilizar reglas de firewall oPolítica de red.
ApagarSolicitudes anónimas, lo cual ya hiciste.
Puede investigarlo --insecure-port=0
, sin embargo, debería quedar obsoleto en las versiones más recientes.
Como información adicional, te aconsejo que consultesKubernetes por las malas, especialmente 3 capítulos:
Provisioning Compute Resources
, Provisioning the CA and Generating TLS Certificates
, Generating Kubernetes Configuration Files for Authentication
. Puede encontrar allí algunas de las mejores prácticas.
Muy buena explicación de las Kube API-server
banderas que puedes encontrar enEste artículo
Enlaces útiles sobre seguridad de clústeres:
Controlar el acceso a la API de Kubernetes
Mejores prácticas de seguridad de Kubernetes
Seguridad de Kubernetes 101: riesgos y 29 mejores prácticas