非 https リクエストの通過を許可しないようにするために、マスター サーバー API のセキュリティを強化しようとしています。
設定のサンプル:
$ 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
。
サーバー API で http ではなく https 接続を許可するようにサーバーに強制するにはどうすればよいですか?
匿名リクエストも無効にしました匿名リクエストしかし、リクエストが通過できることはまだわかります。
答え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に設定されている場合、常に証明書がスキップされ、サーバーのIDはまったくチェックされません。これは次の例に似ています。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コンセプト:
SecurePortを使用する
デフォルトでは、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
。- デフォルトはポートです。-フラグ
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 を安全にする方法