kube apiserver に対する kubectl の安全でない承認を無効にする方法

kube apiserver に対する kubectl の安全でない承認を無効にする方法

非 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 つのポートでサービスを提供します。

  1. localhost port:
  • テストとブートストラップ、およびマスターノードの他のコンポーネント(スケジューラ、コントローラマネージャ)がAPIと通信することを目的としています。
  • TLSなし
  • 安全でない http 接続を無効にする: デフォルトはポート 8080 ですが、--insecure-portフラグで変更します。(無効にするには を使用します--insecure-port=0)
  • デフォルトの IP は です。フラグlocalhostで変更します--insecure-bind-address。( を削除--insecure-bind-address)
  • リクエストは認証および承認モジュールをバイパスします。
  • 要求はアドミッション制御モジュールによって処理されます。
  • ホストアクセスの必要性によって保護されている
  1. 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 ResourcesProvisioning the CA and Generating TLS CertificatesGenerating Kubernetes Configuration Files for Authentication。そこではベスト プラクティスがいくつか見つかります。

Kube API-server旗についての非常に良い説明はこの記事

クラスター セキュリティに関する便利なリンク:

Kubernetes クラスターを安全に保つための基礎 - kube-apiserver を安全にする方法

Kubernetes APIへのアクセスを制御する

Kubernetes セキュリティのベストプラクティス

Kubernetes セキュリティ 101: リスクと 29 のベスト プラクティス

Kubernetes APIへのアクセスを制御する

クラスターへのアクセス

関連情報