Kubenetes: Kubernetes クラスターで単一のリクエストで複数のポッドをヒットすることは可能ですか? 質問する

Kubenetes: Kubernetes クラスターで単一のリクエストで複数のポッドをヒットすることは可能ですか? 質問する

Kubernetes 名前空間内のすべてのポッドのキャッシュをクリアしたいです。エンドポイントに 1 つのリクエストを送信し、そのエンドポイントから名前空間内のすべてのポッドに HTTP 呼び出しを送信してキャッシュをクリアします。現在、Kubernetes を使用してヒットできるポッドは 1 つだけで、ヒットするポッドを制御できません。

ロードバランサーが RR に設定されている場合でも、ポッドを継続的にヒット (n 回、n はポッドの合計数) しても、他のリクエストが侵入する可能性があるため役に立ちません。

同じ問題がここで議論されましたが、実装の解決策を見つけることができませんでした。参考:

私は、すべてのキャッシュを保存し、Hazelcast が自動的にキャッシュの更新を処理する、Hazelcast を使用してキャッシュのクリア部分を実装しようとしています。

この問題に対する別のアプローチ、または特定のリクエストに対してすべてのエンドポイントにヒットするように Kubernetes を構成する方法がある場合は、ここで共有すると非常に役立ちます。

ベストアンサー1

ポッドに kubectl があり、api-server にアクセスできる場合は、すべてのエンドポイント アドレスを取得して curl に渡すことができます。

kubectl get endpoints <servicename> \
        -o jsonpath="{.subsets[*].addresses[*].ip}" | xargs curl

ポッドに kubectl がない場合の代替案:

ポッドから API サーバーにアクセスする推奨方法は、kubectl プロキシを使用することです。https://kubernetes.io/docs/tasks/access-application-cluster/access-cluster/#ポッドから API にアクセスするもちろん、少なくとも同じオーバーヘッドが追加されます。 あるいは、REST API を直接呼び出すこともできますが、トークンを手動で提供する必要があります。

APISERVER=$(kubectl config view --minify | grep server | cut -f 2- -d ":" | tr -d " ")
TOKEN=$(kubectl describe secret $(kubectl get secrets \
     | grep ^default | cut -f1 -d ' ') | grep -E '^token' | cut -f2 -d':' | tr -d " ")

APISERVER 変数と TOKEN 変数を指定すると、ポッドに kubectl は必要ありません。この方法では、API サーバーにアクセスするための curl と、JSON 出力を解析するための "jq" のみが必要になります。

curl $APISERVER/api/v1/namespaces/default/endpoints --silent \
     --header "Authorization: Bearer $TOKEN" --insecure \
     | jq -rM ".items[].subsets[].addresses[].ip" | xargs curl

更新(最終版)

APISERVER は通常 kubernetes.default.svc に設定でき、トークンはポッドの /var/run/secrets/kubernetes.io/serviceaccount/token で利用できるはずなので、手動で何かを指定する必要はありません。

TOKEN=$(cat /var/run/secrets/kubernetes.io/serviceaccount/token); \
curl https://kubernetes.default.svc/api/v1/namespaces/default/endpoints --silent \
     --header "Authorization: Bearer $TOKEN" --insecure \
     | jq -rM ".items[].subsets[].addresses[].ip" | xargs curl

jq はここから入手できます:https://stedolan.github.io/jq/download/(< 4 MiB ですが、JSON を簡単に解析できるので価値があります)

おすすめ記事