このトピックでは、アプリケーションのコンテナセキュリティに関するよくある質問 (FAQ) に回答します。
コンテナ間にネットワーク接続がないのはなぜですか。
この問題は通常、2 種類のセキュリティグループの誤った設定が原因です。
原因 1:Pod ネットワーク CIDR のインバウンドルールが削除された
必要なルールは、Pod の CIDR ブロックからのすべてのトラフィックを許可するものです。このルールがないと、コンテナ間の通信は失敗します。
解決策: 不足しているルールを再度追加します。
Container Service for Kubernetes (ACK) コンソールにログインします。左側のナビゲーションペインで、[クラスター] をクリックします。
[クラスター] ページで、対象のクラスターを見つけてその名前をクリックします。左側のナビゲーションペインで、[クラスター情報] をクリックします。
[クラスター情報] ページで、[基本情報] タブをクリックします。[コントロールプレーンのセキュリティグループ] の横にあるリンクをクリックして、Elastic Compute Service (ECS) コンソールのセキュリティグループページを開きます。
[セキュリティグループ] ページで、[インバウンド] タブをクリックし、[ルールの追加] をクリックします。ダイアログボックスでルールを設定し、[OK] をクリックします。
フィールド
値
[アクション]
許可
[優先度]
デフォルト
[プロトコル]
すべてのトラフィック
[ソース]
Pod の CIDR ブロック ([クラスター情報] ページの [ネットワーク] セクションにある [Pod ネットワーク CIDR] で確認)
原因 2:新しい ECS インスタンスがクラスターとは異なるセキュリティグループに属している
解決策: [基本情報] タブの [セキュリティグループ] フィールドからクラスターのセキュリティグループ ID を取得し、そのセキュリティグループに ECS インスタンスを追加します。詳細については、「インスタンスのセキュリティグループへの追加、セキュリティグループからの削除、またはセキュリティグループの切り替え」をご参照ください。
Kubernetes クラスターのセキュリティグループを指定する方法
クラスター作成時
ACK はクラスター作成時にデフォルトのセキュリティグループを自動的に作成します。カスタムルールを使用するには、作成後にこのセキュリティグループを変更します。詳細については、「クラスターのセキュリティグループの設定」をご参照ください。
既存のクラスターの場合
ACK コンソールにログインします。左側のナビゲーションペインで、[クラスター] をクリックします。
[クラスター] ページで、対象のクラスターを見つけてその名前をクリックします。左側のナビゲーションペインで、[クラスター情報] をクリックします。
[クラスター情報] ページで、[基本情報] タブをクリックします。[ネットワーク] セクションで、[コントロールプレーンのセキュリティグループ] の横にある [編集] をクリックします。
ダイアログボックスで、セキュリティグループを選択し、[OK] をクリックします。
クラスター作成後にクラスター監査機能を無効化または有効化できますか。
はい。 詳細については、「クラスター API サーバーの監査機能の使用」をご参照ください。
ACK 専用クラスターの証明書の有効期間を変更し、コンポーネント証明書を置き換える方法
ACK は、クラスター証明書の有効期限が切れる約 2 か月前に内部メッセージと通知を送信します。通知を受け取ったら、コンソールの [クラスター] ページに移動し、更新ボタンをクリックします。詳細については、「ACK 専用クラスターの期限切れ間近の証明書の更新」をご参照ください。
証明書がすでに期限切れの場合は、「ACK 専用クラスターの期限切れ証明書の更新」をご参照ください。
Pod を作成できず、"no providers available to validate pod request" というエラーが表示されるのはなぜですか。
カスタムの Pod セキュリティポリシー (PSP) を設定していない場合、このエラーはデフォルトの PSP が削除されたことが原因です。これを解決するには、デフォルトの PSP ルールを復元します。詳細については、「[非推奨] Pod セキュリティポリシーの使用」をご参照ください。
代わりにカスタムの PSP を設定するには、「セキュリティポリシー管理の有効化」をご参照ください。
新しい名前空間で Secret を使用できないのはなぜですか。
Secret は名前空間スコープです。各名前空間は独自の分離された Secret のセットを保持し、Pod は同じ名前空間内の Secret にのみアクセスできます。
新しい名前空間で Secret を使用するには、その名前空間に直接 Secret を作成します。
default-token をマウントできないのはなぜですか。
原因: ノード上の systemd のバージョンが古いためです。
エラーメッセージは次のようになります。
Normal Scheduled 13m default-scheduler Successfully assigned dev/alibaba-demo-67fcdbfb8-zklnp to cn-hangzhou.10.7.3.16 Warning FailedMount 13m (x2 over 13m) kubelet, cn-hangzhou.10.7.3.16 MountVolume.SetUp failed for volume 'default-token-8twx9' : mount failed: exit status 1 Mounting command: systemd-run Mounting arguments: --description=Kubernetes transient mount for /var/lib/kubelet/pods/62d39b35-9a4d-11ea-9870-c24d56a0e904/volumes/kubernetes.io~secret/default-token-8twx9 --scope -- mount -t tmpfs tmpfs /var/lib/kubelet/pods/62d39b35-9a4d-11ea-9870-c24d56a0e904/volumes/kubernetes.io~secret/default-token-8twx9 Output: Failed to start transient scope unit: Argument list too long Warning FailedCreatePodContainer 3m40s (x49 over 13m) kubelet, cn-hangzhou.10.7.3.16 unable to ensure pod container exists: failed to create container for [kubepods burstable pod62d39b35-9a4d-11ea-9870-c24d56a0e904] : Argument list too long次のいずれかの修正方法を使用してください。
systemd をアップグレードします。詳細については、「kubernetes/kubernetes #57345 に関する GitHub のコメント」をご参照ください。
sudo systemctl daemon-reloadを実行して、デーモンを再起動しリセットします。詳細については、「kubernetes/kubernetes #57345 に関する GitHub のコメント」をご参照ください。
監査ログをクエリする方法
監査ログは Simple Log Service (SLS) に保存されます。Logstore を開くには:
ACK コンソールにログインします。左側のナビゲーションペインで、[クラスター] をクリックします。
[クラスター] ページで、対象のクラスターを見つけてその名前をクリックします。左側のナビゲーションペインで、[クラスター情報] をクリックします。
[クラスター情報] ページで、[基本情報] タブをクリックします。[Log Service プロジェクト] の横にあるリンクをクリックして、SLS コンソールを開きます。
[ログストレージ] > [Logstores] ページで、
audit-<cluster_id>Logstore を選択し、右上隅の [検索と分析] をクリックします。システムが正常に動作していた時から問題が発生した時までの期間が含まれるように時間範囲を選択します。たとえば、3 日間、7 日間、または 15 日間です。
[検索と分析] テキストボックスにクエリを入力し、[検索と分析] をクリックします。
結果をダウンロードするには、
アイコンをクリックし、[ログのダウンロード] を選択します。ダイアログボックスでダウンロード設定を構成し、[OK] をクリックします。
RBAC 関連の変更のクエリ
requestURI: "rbac.authorization.k8s.io" not (verb: get or verb: watch)ConfigMap 関連の変更のクエリ
<configmap_name> を実際の ConfigMap 名に置き換えます。
requestURI: "configmaps" and <configmap_name> not (verb: get or verb: watch or verb: list)Deployment における Pod スケーリングのクエリ
<deployment_name> を実際の Deployment 名に置き換えます。
requestURI: deployments and (verb: update or verb: patch) and replicas and deployments and <deployment_name> not deployment-controller