ポッドでクラスターCIDRを取得するにはどうすればよいですか?

Aug 21 2020

ポッド内でクラスターCIDR(すべてのポッドIPアドレスを含むIPアドレス範囲)を使用するにはどうすればよいですか?(自動的に、環境変数、ConfigMap、またはその他の場所に手動で配置することはありません。)

私がしたいことの例:

env:
  - name: CLUSTER_CIDR
    valueFrom: # ??? does a configMap like this exist ??? Or any other source for clusterCidr?
      configMap:
       key: clusterCidr
       name: ...

私の最善の部分的な解決策:

  - name: POD_IP
    valueFrom:
      fieldRef:
        fieldPath: status.podIP

  - name: GUESSED_CLUSTER_CIDR
    value: $(POD_IP)/16

keyの値のどこかにあるfull-cluster-state名前空間のconfigMap内のclusterCidrを見つけることができます。ただし、この値はjsonを含む文字列であり、ベンダー固有のように見えます()。Deployment.yamlの値の一部を抽出できません。そして、私はベンダーに依存しないソリューションを好む。kube-systemfull-cluster-statecurrentState.rkeConfig.services.kubeController.clusterCidr

関連する問題で言及されているComponentConfigがどこにあるのかわからず、まだアルファ版であるかどうかさえわかりません。


関連するk8sの問題((明確な)修正なしですべてクローズ):

  • https://github.com/kubernetes/kubernetes/issues/25533
  • https://github.com/kubernetes/kubernetes/issues/46508

クラスターのCIDRを手動で見つける方法について:

  • KubernetesクラスターのクラスターとサービスCIDRをどのように見つけますか?
  • プログラムでそれを見つけることについて古い:Kubernetes-プログラムでサービスIP範囲CIDRを見つける
  • 信頼できるプロキシにCIDRを使用して、私がしたいこと:Kubernetes:入力内部IPを環境に追加する

回答

PjoterS Aug 27 2020 at 20:27

これに対するベンダーに依存しないソリューションはありません。またComponentConfig、まだalpha featureそうなので、十分な適切なドキュメントがありません。

ただし、現時点で(普遍的でなくても)最善の方法は、次のものを使用することです。

$ kubectl cluster-info dump | grep -m 1 cluster-cidr

次に、出力さConfigMapれたクラスターCIDR値を使用して新しいものを作成し、このドキュメントのようにポッドで参照できます。

概念が同じであっても、異なる環境で異なるアプローチを適用する必要があります。残念ながら、今日の時点で単一の解決策はありません。

追加情報については、CIDRKubeadm Google Kubernetes EngineCIDRについての簡単な比較をすでに行っています。詳細については、このスレッドを確認してください。