Ich versuche, meine Master-Server-API sicherer zu machen, um zu verhindern, dass Nicht-HTTPS-Anfragen durchkommen.
Beispiel einer Konfiguration:
$ 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
Das funktioniert, solange ich die richtigen CAs verwende.
Mein Problem ist, dass es auch funktioniert, wenn ich die CAs entferne oder die falschen CAs habe und einfach das Flag anwende --insecure-skip-tls-verify
.
Wie kann ich den Server zwingen, über die Server-API https-Verbindungen statt http zuzulassen?
Ich habe auch anonyme Anfragen deaktiviertAnonyme Anfragenaber ich sehe immer noch, dass die Anfragen durchgehen können.
Antwort1
Mein Problem ist, dass es auch funktioniert, wenn ich die CAs entferne oder die falschen CAs habe und einfach das Flag --insecure-skip-tls-verify anwende.
Die Verwendung --insecure-skip-tls-verify
ist sehrNICHT EMPFOHLENin der Produktionsumgebung. Es kann verwendet werden, wenn Sie einige lokale Tests durchführen möchten oder zu Lernzwecken.
InKubectlDokumentation Sie haben Informationen:
--insecure-skip-tls-verify
If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure
Wenn dieses Flag also auf true gesetzt wird, werden Zertifikate immer übersprungen und die Identität des Servers wird überhaupt nicht überprüft. Es ist ähnlich wiecurl -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.
Sie können Ihren Cluster auf viele Arten sichern, aber es hängt vom Szenario ab. Es gibt jedoch einige HauptAPI-Server-Ports und IPsKonzepte:
Verwenden Sie SecurePort
Standardmäßig bedient der Kubernetes-API-Server HTTP
zwei Ports:
localhost port:
- ist für Tests und Bootstrap vorgesehen, sowie für die Kommunikation anderer Komponenten des Masterknotens (Scheduler, Controller-Manager) mit der API
- kein TLS
- Deaktivieren Sie unsichere HTTP-Verbindungen: Standard ist Port 8080, ändern Sie ihn mit
--insecure-port
Flag. (Kann deaktiviert werden durch--insecure-port=0
)- Standard-IP ist
localhost
, mit Flag ändern--insecure-bind-address
. (Entfernen--insecure-bind-address
)- Anfrage umgeht Authentifizierungs- und Autorisierungsmodule.
- Anforderung, die von Zulassungskontrollmodul(en) bearbeitet wird.
- geschützt durch die Notwendigkeit des Host-Zugriffs
Secure port:
- wenn möglich verwenden Sicheren Port aktivieren:
- verwendet TLS. Setzen Sie das Zertifikat mit
--tls-cert-file
und den Schlüssel mit--tls-private-key-file
der Flagge.- Standard ist Port
6443
, ändern Sie es mit-secure-port
-Flag.- Die Standard-IP ist die erste
non-localhost
Netzwerkschnittstelle. Ändern Sie sie mit--bind-address
Flag.- Anfragen werden von Authentifizierungs- und Autorisierungsmodulen bearbeitet.
- Anforderung, die von Zulassungskontrollmodul(en) bearbeitet wird.
- Es werden Authentifizierungs- und Autorisierungsmodule ausgeführt.
API-Zugriff einschränken, was bedeutet, dass Sie den Zugriff auf Ihre API nur von einer bestimmten IP-Adresse oder einem bestimmten IP-Bereich (autorisierte Netzwerke) aus zulassen sollten. Sie sollte nicht von außerhalb der Welt zugänglich sein. Dazu können Sie Firewall-Regeln verwenden oderNetzwerkrichtlinie.
AbschaltenAnonyme Anfragen, was Sie bereits getan haben.
Sie können sich das ansehen --insecure-port=0
, es sollte jedoch in neueren Versionen veraltet sein.
Als zusätzliche Information empfehle ich Ihnen,Kubernetes auf die harte Tour, insbesondere 3 Kapitel:
Provisioning Compute Resources
, Provisioning the CA and Generating TLS Certificates
, Generating Kubernetes Configuration Files for Authentication
. Dort finden Sie einige Best Practices.
Sehr gute Erklärung der Kube API-server
Flaggen finden Sie inDieser Artikel
Nützliche Links zur Clustersicherheit:
Grundlagen zur Absicherung von Kubernetes-Clustern - So sichern Sie den Kube-API-Server
Steuern des Zugriffs auf die Kubernetes-API
Bewährte Methoden für die Kubernetes-Sicherheit
Kubernetes-Sicherheit 101: Risiken und 29 Best Practices