我正在嘗試使我的主伺服器 API 更加安全,以避免允許非 https 請求通過。
設定範例:
$ 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 或我有錯誤的 CA,並且只需應用該標誌,它也可以工作--insecure-skip-tls-verify
。
如何強制伺服器在 Server-API 上允許 https 連線而不是 http 連線?
我還禁用了匿名請求匿名請求但我仍然可以看到請求可以通過。
答案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.
您可以透過多種方式保護集群,但這取決於場景。不過,有一些主要API伺服器連接埠和IP概念:
使用安全端口
預設情況下,Kubernetes API 伺服器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
。- 預設為 port
6443
,用 - 標誌更改-secure-port
。- 預設IP是第一個
non-localhost
網路接口,用--bind-address
標誌改變。- 由身份驗證和授權模組處理的請求。
- 由准入控制模組處理的請求。
- 身份驗證和授權模組運行。
限制API訪問,這意味著您應該僅允許從特定 IP 或特定 IP 範圍(授權網路)存取您的 api。它不應該從外部世界訪問。為此,您可以使用防火牆規則或網路政策。
關匿名請求,你已經這樣做了。
您可以查看--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