Kubernetesの階局名前付けを発衚

箄transl。最近、「HierarchicalNamespaces」プロゞェクトがKubernetesブログで発衚されたした。正匏には昚幎末から存圚しおいたしたが、今では倧勢の聎衆に階局型ネヌムスペヌスコントロヌラヌHNCを発衚するこずが適切であるず著者は刀断したした。目的ず実装の詳现に぀いお-この資料を読んでください。HNCロヌドマップの翻蚳も補足されおいたす。







単䞀のKubernetesクラスタヌで倚数のナヌザヌを安党にホストするこずは垞に困難でした。䞻な理由は、すべおの組織でKubernetesの䜿甚方法が異なるため、単䞀のマルチナヌザヌモデルがすべおの人に圹立぀可胜性は䜎いためです。代わりに、Kubernetesは、Role Based Access ControlRBACやNetworkPoliciesなどの独自の゜リュヌションを構築するためのコンポヌネントを提䟛したす。これらのコンポヌネントが優れおいるほど、安党なマルチナヌザヌクラスタヌの構築が容易になりたす。



名前空間が急いで救助に



これらのコンポヌネントの䞭で最も重芁なのは名前名です。これらは、Kubernetesのほがすべおのセキュリティおよびコントロヌルプレヌン共有ポリシヌの基瀎です。たずえば、RBAC、NetworkPolicies、およびResourceQuotasはデフォルトで名前名をサポヌトしたすが、Secret、ServiceAccount、Ingressなどのオブゞェクトは1぀のスペヌス内で自由に利甚できたすが、他のスペヌスからは完党に分離されおいたす。



名前空間には、ポリシヌの実斜に理想的ないく぀かの重芁な機胜がありたす。たず、プロパティを衚すために䜿甚できたす。ほずんどのKubernetesオブゞェクトは任意の名前名になりたす。名前名を䜿甚しお所有暩を衚すこずにより、い぀でもそれらのオブゞェクトが所有者を持぀こずを期埅できたす。



次に、適切な暩限を持぀ナヌザヌのみが名前名を䜜成しお䜿甚できたす。名前名を䜜成するには昇栌された暩限が必芁であり、他のナヌザヌはそれらを操䜜するため、぀たり、それらの名前名でオブゞェクトを䜜成、衚瀺、たたは倉曎するための明瀺的な暩限が必芁です。したがっお、最初に耇雑なポリシヌのセットを䜿甚しお名前名が䜜成され、その埌でのみ、特暩のないナヌザヌがポッドやサヌビスなどの「通垞の」オブゞェクトを䜜成できたす。



名前空間の制限



残念ながら、実際には、名前付けは十分な柔軟性がなく、いく぀かの䞀般的な䜿甚䟋にはうたく適合したせん。たずえば、特定のチヌムは、異なるシヌクレットずクォヌタを持぀いく぀かのマむクロサヌビスを所有しおいたす。理想的には、これらのサヌビスを別々の名前名に分割しお互いに分離する必芁がありたすが、これには2぀の問題がありたす。



たず、これらの名前名は、䞡方が同じチヌムによっお所有されおいるにもかかわらず、所有暩の単䞀の抂念を欠いおいたす。぀たり、Kubernetesは、これらの名前空間に1人の所有者がいるずいう事実に぀いお䜕も知らないだけでなく、制埡されおいるすべおの名前空間にグロヌバルポリシヌを䞀床に適甚する機胜もありたせん。



第二に、ご存知のように、自埋性は効果的なチヌムワヌクの鍵です。名前名の䜜成には昇栌された特暩が必芁なため、開発チヌムの誰もがこれらの特暩を持っおいる可胜性はほずんどありたせん。぀たり、チヌムが新しい名前名を䜜成するこずを決定するたびに、クラスタヌ管理者に連絡する必芁がありたす。これは小さな䌚瀟にずっおは完党に受け入れられるかもしれたせんが、それが成長するに぀れお、そのような組織の悪圱響はより顕著になりたす。



階局型ネヌムスペヌスの玹介



階局型名前付けは、これらの問題に察凊するためにKubernetesマルチテナンシヌwg-multitenancyワヌキンググルヌプによっお開発された新しい抂念です。簡略化された圢匏では、階局名矩は通垞のKubernetes名矩であり、1぀のオプションの芪名矩を指す小さなカスタムリ゜ヌスが含たれおいたす。これにより、所有暩の抂念が、名前名内のオブゞェクトだけでなく、名前名自䜓にも拡匵されたす。



所有暩の抂念は、2぀の远加タむプの関係も実装したす。



  • : namespace , , , RoleBindings RBAC, .




これにより、䞀般的な開発チヌムの䞡方の問題が解決されたす。クラスタヌ管理者は、必芁なポリシヌずずもに1぀の「ルヌト」スペヌスを䜜成し、サブスペヌスを䜜成する暩限をチヌムメンバヌに委任できたす。このようにしお、開発者は、クラスタヌ管理者によっお蚭定されたポリシヌに違反するこずなく、自分で䜿甚するためのサブネヌムスペヌスを䜜成できたす。



少し緎習



階局ネヌムスペヌスは、Hierarchical NamespaceControllerたたはHNCず呌ばれるKubernetes拡匵機胜を䜿甚しお実装されたす。HNCは、次の2぀のコンポヌネントで構成されおいたす。



  • Managerはクラスタヌで動䜜し、サブネヌムスペヌスを管理し、ポリシヌオブゞェクトを配垃し、階局が有効であるこずを確認し、拡匵ポむントを管理したす。


  • kubectl-hnsそれず呌ばれるkubectlプラグむンにより、ナヌザヌはマネヌゞャヌず察話できたす。


コンポヌネントのむンストヌルガむドは、プロゞェクトリポゞトリのリリヌスペヌゞにありたす。



HNCがどのように機胜するかを芋おみたしょう。名前名を䜜成する暩限がないずしたすが、名前名team-aを参照しお、その䞭にサブ名前空間を䜜成できたす*。プラグむンを䜿甚するず、次のコマンドを入力できたす。



$ kubectl hns create svc1-team-a -n team-a


*技術的には、芪スペヌスに「サブネヌムスペヌスアンカヌ」ず呌ばれる小さなオブゞェクトを䜜成しおから、HNCがサブネヌムスペヌスを䜜成したす。



これにより、名前が䜜成されたすsvc1-team-a。サブネヌムスペヌスは通垞のKubernetesネヌムスペヌスず同じであるため、名前は䞀意である必芁があるこずに泚意しおください。



次のコマンドを䜿甚しお、結果の構造を衚瀺できたすtree。



$ kubectl hns tree team-a
# Output:
team-a
└── svc1-team-a


芪スペヌスにポリシヌがある堎合、それらは子にコピヌされたす*。たずえば、ずteam-a呌ばれるRBACRoleBindingがあるずしsresたす。このRoleBindingは、察応する名前名にも衚瀺されたす。



$ kubectl describe rolebinding sres -n svc1-team-a
# Output:
Name:         sres
Labels:       hnc.x-k8s.io/inheritedFrom=team-a  # inserted by HNC
Annotations:  <none>
Role:
  Kind:  ClusterRole
  Name:  admin
Subjects: 



*デフォルトでは、RBACのRolesずRoleBindingsのみが再配垃されたすが、Kubernetesオブゞェクトを䌝播するようにHNCを構成できたす。



最埌に、HNCは、階局に関する有甚な情報を含むラベルをこれらの名前名に远加したす。これらは、他のポリシヌを適甚するために䜿甚できたす。たずえば、次のNetworkPolicyを䜜成できたす。



kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
  name: allow-team-a
  namespace: team-a
spec:
  ingress:
  - from:
    - namespaceSelector:
        matchExpressions:
          - key: 'team-a.tree.hnc.x-k8s.io/depth' # Label created by HNC
            operator: Exists


このポリシヌは、子孫に䌝播されたすteam-aずなりたすたた、これらの名前空間のすべおの間で入力トラフィックを蚱可したす。HNCのみがラベル「ツリヌ」を割り圓おるこずができたす。珟圚の階局を反映するこずが保蚌されおいたす。



HNC機胜の詳现に぀いおは、ナヌザヌマニュアルを参照しおください。



次のステップずプロセスぞの参加



階局型名前空間が組織で圹立぀ず思われる堎合は、バヌゞョンHNC v0.5.1がGitHubで 利甚可胜です8月28日からリリヌスv0.5.2たで利甚可胜-箄Perevi ..。あなたがそれに぀いおどう思うか、あなたがそれでどんな問題を解決するか、そしおあなたがそれにどんな機胜を远加したいかを知りたいです。開発の初期段階にある他の゜フトりェアず同様に、本番環境でHNCを䜿甚する堎合は泚意が必芁です。たた、フィヌドバックが倚ければ倚いほど、HNC1.0に早く到達できたす。



たた、サヌドパヌティの寄皿者からの寄皿を歓迎したす。バグ修正やそれらに関する情報、䟋倖、監芖の改善、階局的なリ゜ヌスの芋積もり、構成の最適化などの新機胜のプロトタむピングに圹立ちたす。



リポゞトリ、ニュヌスレタヌ、たたはSlackでお 問い合わせください。ご意芋をお埅ちしおおりたす



最初の発衚は、Hierarchical NamespaceControllerの゜フトりェア゚ンゞニア兌テクニカルリヌドであるAdrianLudwinによっお行われたした。



ボヌナスロヌドマップず問題



問題を投皿しおください-もっず楜しいですバグは最初に分析され、機胜芁求が優先され、その埌、䜜業蚈画たたはバックログに含たれたす。



HNCはただGAステヌタスに達しおいないため、倱うわけにはいかない構成オブゞェクトGitリポゞトリに保存されおいないオブゞェクトなどを含むクラスタヌでHNCを䜿甚する堎合は泚意が必芁です。



すべおのHNCの問題は、察応する䜜業蚈画に含たれおいたす。珟圚、この蚈画の次の䞻芁な段階が実斜たたは蚈画されおいたす。



  • v1.0Iの終わり-2021幎のII四半期の始たり。生産にはHNCをお勧めしたす。
  • v0.82021幎初頭。新しい重芁な機胜が衚瀺される堎合がありたす。
  • v0.72020幎末。ほずんどの堎合、v1beta1APIが衚瀺されたす。
  • v0.6: 2020-; v1alpha2 API .
  • v0.5: 2020-; , .
  • v0.4: 2020-; API production-.
  • v0.3: 2020-; UX subnamespace'.
  • v0.2: 2019-; non-production.
  • v0.1: 2019-; . , - .
  • : .


翻蚳者からのPS



私たちのブログも読んでください






All Articles