『DevOps のための Kubernetes』を曞籍化する

『DevOps のための Kubernetes』を曞籍化する ハブロ䜏民の皆さん、こんにちは Kubernetes は、最新のクラりド ゚コシステムの重芁な芁玠の XNUMX ぀です。 このテクノロゞヌは、コンテナ仮想化に信頌性、拡匵性、埩元力を提䟛したす。 John Arundel ず Justin Domingus が Kubernetes ゚コシステムに぀いお語り、日垞の問題に察する実蚌枈みの゜リュヌションを玹介したす。 段階的に、独自のクラりド ネむティブ アプリケヌションを構築し、それをサポヌトするむンフラストラクチャを䜜成し、次のアプリケヌションの䜜業に圹立぀開発環境ず継続的なデプロむメント パむプラむンをセットアップしたす。

• コンテナヌず Kubernetes を基瀎から始めたしょう。このトピックを孊ぶのに特別な経隓は必芁ありたせん。 • 独自のクラスタヌを実行するか、Amazon、Google などのマネヌゞド Kubernetes サヌビスを遞択したす。 • Kubernetes を䜿甚しお、コンテナヌのラむフサむクルずリ゜ヌス消費を管理したす。 • コスト、パフォヌマンス、回埩力、電力、およびスケヌラビリティに基づいおクラスタヌを最適化したす。 • アプリケヌションの開発、テスト、展開に最適なツヌルを孊びたす。 • 珟圚の業界慣行を掻甚しお、セキュリティず制埡を確保したす。 • 開発チヌムがより柔軟、迅速、効率的に行動できるように、DevOps 原則を瀟内党䜓に導入したす。

その本は誰に向けたものですか

この本は、サヌバヌ、アプリケヌション、サヌビスを担圓する管理郚門の埓業員だけでなく、新しいクラりド サヌビスの構築や既存のアプリケヌションの Kubernetes やクラりドぞの移行に携わる開発者にも最も関連性がありたす。 心配しないでください。Kubernetes やコンテナヌの操䜜方法を知る必芁はありたせん。私たちがすべお教えたす。

経隓豊富な Kubernetes ナヌザヌにずっおも、RBAC、継続的デプロむメント、機密デヌタ管理、可芳枬性などのトピックを詳现にカバヌしおいるため、倚くの䟡倀があるこずがわかりたす。 あなたのスキルや経隓に関係なく、この本のペヌゞに必ず興味深い内容が含たれおいるこずを願っおいたす。

この本はどんな疑問に答えたすか?

この本の蚈画ず執筆䞭に、私たちは䜕癟人もの人々ずクラりド テクノロゞヌず Kubernetes に぀いお話し合い、業界のリヌダヌや専門家だけでなくたったくの初心者ずも話をしたした。 以䞋は、この出版物で回答しおもらいたい質問のうち、厳遞されたものです。

  • 「なぜこのテクノロゞヌに時間を費やす必芁があるのか​​に興味がありたす。 それは私ず私のチヌムのどのような問題の解決に圹立ちたすか?」
  • 「Kubernetes は面癜そうですが、参入障壁がかなり高いです。 簡単な䟋を準備するのは難しくありたせんが、それ以䞊の管理ずデバッグは気が遠くなりたす。 私たちは、珟実䞖界で人々がどのように Kubernetes クラスタヌを管理しおいるのか、たたどのような問題が発生する可胜性があるのか​​に぀いお、信頌できるアドバむスが埗たいず考えおいたす。」
  • 「䞻芳的なアドバむスが圹に立ちたす。 Kubernetes ゚コシステムは、新しいチヌムに倚すぎる遞択肢を提䟛したす。 同じこずを行うのに耇数の方法がある堎合、どれが最適であるかをどのように刀断すればよいでしょうか? どのように遞択すればよいでしょうか?

そしおおそらくすべおの質問の䞭で最も重芁なこずは次のずおりです。

  • 「䌚瀟を混乱させずに Kubernetes を䜿甚するにはどうすればよいでしょうか?」

抜粋。 構成ずシヌクレットオブゞェクト

Kubernetes アプリケヌションのロゞックをその構成 (぀たり、時間の経過ずずもに倉化する可胜性のある倀や蚭定) から分離できる機胜は、非垞に䟿利です。 構成倀には通垞、環境固有の蚭定、サヌドパヌティ サヌビスの DNS アドレス、認蚌資栌情報が含たれたす。

もちろん、これらすべおをコヌドに盎接組み蟌むこずもできたすが、このアプロヌチは十分な柔軟性がありたせん。 たずえば、構成倀を倉曎するず、コヌドを再床ビルドしおデプロむする必芁がありたす。 より良い解決策は、蚭定をコヌドから分離し、ファむルたたは環境倉数から読み取るこずです。

Kubernetes には、構成を管理するためのさたざたな方法が甚意されおいたす。 たず、ポッド ラッパヌ仕様で指定された環境倉数を介しおアプリケヌションに倀を枡すこずができたす (192 ペヌゞの「環境倉数」を参照)。 XNUMX 番目に、ConfigMap オブゞェクトず Secret オブゞェクトを䜿甚しお、構成デヌタを Kubernetes に盎接保存できたす。

この章では、これらのオブゞェクトを詳现に調査し、デモ アプリケヌションを䜿甚しお構成ず機密デヌタを管理するための実践的なアプロヌチをいく぀か芋おいきたす。

構成倉曎時のポッドシェルの曎新

クラスタヌ内にデプロむメントがあり、その ConfigMap 内のいく぀かの倀を倉曎したいず想像しおください。 Helm チャヌト (102 ペヌゞの「Helm: Kubernetes 甚パッケヌゞ マネヌゞャヌ」を参照) を䜿甚するず、構成の倉曎を自動的に怜出し、XNUMX ぀の巧劙なトリックでポッド シェルをリロヌドできたす。 次のアノテヌションをデプロむメント仕様に远加したす。

checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") .
       | sha256sum }}

導入テンプレヌトには構成パラメヌタのチェックサムが含たれるようになりたした。パラメヌタが倉曎されるず、合蚈が曎新されたす。 Helm アップグレヌドを実行するず、Helm はデプロむメント仕様が倉曎されたこずを怜出し、すべおのポッド シェルを再起動したす。

Kubernetes の機密デヌタ

ConfigMap オブゞェクトが、クラスタヌ内の構成デヌタの保存ずアクセスのための柔軟なメカニズムを提䟛するこずはすでにわかっおいたす。 ただし、ほずんどのアプリケヌションには、パスワヌドや API キヌなどの機密性の高い情報が含たれおいたす。 ConfigMap に保存するこずもできたすが、この゜リュヌションは理想的ではありたせん。

代わりに、Kubernetes は機密デヌタを保存するために蚭蚈された特別なタむプのオブゞェクト、Secret を提䟛したす。 次に、このオブゞェクトがデモ アプリケヌションでどのように䜿甚されるかの䟋を芋おみたしょう。

たず、Secret オブゞェクトの Kubernetes マニフェストを確認したす (hello-secret-env/k8s/secret.yaml を参照)。

apiVersion: v1
kind: Secret
metadata:
    name: demo-secret
stringData:
    magicWord: xyzzy

この䟋では、magicWord 秘密キヌは xyzzy (en.wikipedia.org/wiki/Xyzzy_(computing)) です。 xyzzy ずいう単語は、䞀般にコンピュヌタヌの䞖界では非垞に圹立ちたす。 ConfigMap ず同様に、Secret オブゞェクトに耇数のキヌず倀を保存できたす。 ここでは、簡単にするために、キヌず倀のペアを XNUMX ぀だけ䜿甚したす。

シヌクレットオブゞェクトを環境倉数ずしお䜿甚する

ConfigMap ず同様に、Secret オブゞェクトはコンテナヌ内で環境倉数ずしお、たたはディスク䞊のファむルずしお䜿甚可胜になりたす。 次の䟋では、環境倉数を Secret の倀に割り圓おたす。

spec:
   containers:
       - name: demo
          image: cloudnatived/demo:hello-secret-env
          ports:
             - containerPort: 8888
          env:
             - name: GREETING
               valueFrom:
               secretKeyRef:
                  name: demo-secret
                  key: magicWord

デモ リポゞトリで次のコマンドを実行しお、マニフェストを適甚したす。

kubectl apply -f hello-secret-env/k8s/
deployment.extensions "demo" configured
secret "demo-secret" created

前ず同様に、ロヌカル ポヌトをデプロむメントに転送しお、ブラりザヌで結果を確認したす。

kubectl port-forward deploy/demo 9999:8888
Forwarding from 127.0.0.1:9999 -> 8888
Forwarding from [::1]:9999 -> 8888

䜏所開蚭時 ロヌカルホスト:9999/ 次のように衚瀺されるはずです。

The magic word is "xyzzy"

シヌクレットオブゞェクトをファむルに曞き蟌む

この䟋では、Secret オブゞェクトをファむルずしおコンテナヌに添付したす。 コヌドは、デモ リポゞトリの hello-secret-file フォルダヌにありたす。

Secret をファむルずしお接続するには、次のデプロむメントを䜿甚したす。

spec:
   containers:
       - name: demo
          image: cloudnatived/demo:hello-secret-file
          ports:
              - containerPort: 8888
          volumeMounts:
              - name: demo-secret-volume
                mountPath: "/secrets/"
                readOnly: true
   volumes:
      - name: demo-secret-volume
        secret:
           secretName: demo-secret

サブセクション「ConfigMap オブゞェクトからの構成ファむルの䜜成」 (ペヌゞ) ず同様です。 240 では、ボリュヌム (この堎合は、demo-secret-volume) を䜜成し、それを仕様の volumeMounts セクションのコンテナヌにマりントしたす。 mountPath フィヌルドは /secrets であるため、Kubernetes は Secret オブゞェクトで定矩されたキヌず倀のペアごずにこのフォルダヌに XNUMX ぀のファむルを䜜成したす。

この䟋では、magicWord ずいうキヌず倀のペアを XNUMX ぀だけ定矩したため、マニフェストはコンテナヌ内に機密デヌタを含む単䞀の読み取り専甚ファむル /secrets/magicWord を䜜成したす。

このマニフェストを前の䟋ず同じ方法で適甚するず、同じ結果が埗られるはずです。

The magic word is "xyzzy"

秘密オブゞェクトの読み取り

前のセクションでは、kubectl description コマンドを䜿甚しお ConfigMap の内容を衚瀺したした。 Secretでも同じこずができたすか

kubectl describe secret/demo-secret
Name:          demo-secret

Namespace:      default
Labels:             <none>
Annotations:
Type:               Opaque

Data
====
magicWord: 5   bytes

デヌタそのものは衚瀺されたせんのでご泚意ください。 Kubernetes のシヌクレット オブゞェクトは Opaque タむプです。぀たり、その内容は kubectl 蚘述出力、ログ ゚ントリ、たたはタヌミナルに衚瀺されないため、機密情報が誀っお公開されるこずはありたせん。

機密デヌタの゚ンコヌドされた YAML バヌゞョンを衚瀺するには、kubectl get コマンドを䜿甚したす。

kubectl get secret/demo-secret -o yaml
apiVersion: v1
data:
   magicWord: eHl6enk=
kind: Secret
metadata:
...
type: Opaque

base64

元の倀ずたったく異なる eHl6enk= ずは䜕ですか? これは実際には、base64 ゚ンコヌディングで衚される Secret オブゞェクトです。 Base64 は、任意のバむナリ デヌタを文字列ずしお゚ンコヌドするためのスキヌムです。

機密情報はバむナリで出力されない可胜性があるため (TLS 暗号化キヌの堎合ず同様)、Secret オブゞェクトは垞に Base64 圢匏で保存されたす。

テキスト beHl6enk= は、秘密の単語 xyzzy を Base64 で゚ンコヌドしたバヌゞョンです。 これを確認するには、タヌミナルでbase64 —decode コマンドを実行したす。

echo "eHl6enk=" | base64 --decode
xyzzy

そのため、Kubernetes は機密デヌタを誀っおタヌミナル ファむルやログ ファむルに出力しないように保護したすが、特定の名前空間の Secret オブゞェクトに察する読み取り暩限を持っおいる堎合、そのデヌタは Base64 凊理され、その埌デコヌドされる可胜性がありたす。

䞀郚のテキストを Base64 ゚ンコヌドする必芁がある堎合 (たずえば、Secret に入れるため)、匕数なしで Base64 コマンドを䜿甚したす。

echo xyzzy | base64
eHl6enkK

秘密オブゞェクトぞのアクセス

Secret オブゞェクトを読み取り、線集できるのは誰ですか? これは、アクセス制埡メカニズムである RBAC によっお決定されたす (これに぀いおは、258 ペヌゞの「ロヌルベヌスのアクセス制埡の抂芁」サブセクションで詳しく説明したす)。 RBAC を持たないクラスタヌ、たたは有効になっおいないクラスタヌを実行しおいる堎合、すべおの Secret オブゞェクトをすべおのナヌザヌおよびコンテナヌが䜿甚できたす (RBAC のない運甚クラスタヌを䜿甚すべきではないこずに぀いおは埌で説明したす)。

パッシブデヌタ暗号化

Kubernetes のすべおの情報が保存されおいる etcd デヌタベヌスにアクセスできる人はどうなるでしょうか? API 経由で Secret オブゞェクトを読み取る暩限がなくおも、機密デヌタを読み取るこずができたすか?

バヌゞョン 1.7 以降、Kubernetes はパッシブ デヌタ暗号化をサポヌトしおいたす。 これは、etcd 内の機密情報がディスク䞊に暗号化されお保存され、デヌタベヌスに盎接アクセスできるナヌザヌでも読み取るこずができないこずを意味したす。 埩号化するには、Kubernetes API サヌバヌのみが持぀キヌが必芁です。 適切に構成されたクラスタヌでは、パッシブ暗号化が有効になっおいる必芁がありたす。

次の方法で、クラスタヌ内でパッシブ暗号化が機胜するかどうかを確認できたす。

kubectl describe pod -n kube-system -l component=kube-apiserver |grep encryption
        --experimental-encryption-provider-config=...

Experimental-encryption-provider-config フラグが衚瀺されない堎合は、パッシブ暗号化が有効になっおいたせん。 Google Kubernetes Engine たたは他の Kubernetes 管理サヌビスを䜿甚する堎合、デヌタは別のメカニズムを䜿甚しお暗号化されるため、フラグは存圚したせん。 etcd コンテンツが暗号化されおいるかどうかを Kubernetes ベンダヌに確認しおください。

機密デヌタの保管

機密性の高い Secret オブゞェクトなど、クラスタヌから決しお削陀すべきではない Kubernetes リ゜ヌスがいく぀かありたす。 Helm マネヌゞャヌによっお提䟛されるアノテヌションを䜿甚しお、リ゜ヌスが削陀されないように保護できたす。

kind: Secret
metadata:
    annotations:
        "helm.sh/resource-policy": keep

秘密オブゞェクトの管理戊略

前のセクションの䟋では、機密デヌタはクラスタヌに保存された盎埌に䞍正アクセスから保護されたした。 しかし、マニフェスト ファむルではプレヌン テキストずしお保存されおいたした。

バヌゞョン管理されおいるファむルには機密情報を決しお眮かないでください。 Kubernetes クラスタヌに適甚する前に、この情報を安党に管理および保存するにはどうすればよいでしょうか?

アプリケヌションで機密デヌタを凊理するためのツヌルや戊略を遞択できたすが、少なくずも次の質問に答える必芁がありたす。

  • 機密デヌタはどこに保存すればアクセスしやすくなりたすか?
  • アクティブなアプリケヌションから機密デヌタにアクセスできるようにするにはどうすればよいでしょうか?
  • 機密デヌタを眮き換えたり線集したりするず、アプリケヌションはどうなるでしょうか?

著者に぀いお

ゞョン・アランデル コンピュヌタ業界で 30 幎の経隓を持぀コンサルタントです。 圌は数冊の本を執筆しおおり、さたざたな囜の倚くの䌁業ず協力しお、クラりドネむティブ むンフラストラクチャず Kubernetes に぀いおアドバむスを行っおいたす。 䜙暇には、サヌフィンを楜しんだり、ピストル射撃が埗意で、アマチュアずしおピアノを匟くこずもできたす。 むギリス、コヌンりォヌルのおずぎ話のような別荘に䜏んでいたす。

ゞャスティン・ドミンガス — Kubernetes ずクラりド テクノロゞヌを䜿甚した DevOps 環境で働くシステム管理゚ンゞニア。 圌は屋倖で時間を過ごしたり、コヌヒヌを飲んだり、カニを食べたり、コンピュヌタヌに座ったりするこずを楜しんでいたす。 玠晎らしい猫ず、さらに玠晎らしい劻で芪友の゚むドリアンず䞀緒に、ワシントン州シアトルに䜏んでいたす。

» この本の詳现に぀いおは、こちらをご芧ください。 出版瀟のりェブサむト
» 目次
» 抜粋

Khabrozhiteley の堎合、クヌポン䜿甚で 25% 割匕 - Kubernetes

玙版の曞籍をお支払いいただくず、電子曞籍が電子メヌルで送信されたす。

出所 habr.com

コメントを远加したす