SkupperによるマルチラウドK 8 S通信の実現


イントロ


エンジニアリングチームが彼らのインフラ目標にマルチクラウドアプローチを組み込むことを試みるとき、直面する多くの挑戦があります.Kubernetesはこれらの問題のいくつかに対処する良い仕事をします、しかし、複数の地域で複数の雲プロバイダーにまたがるクラスタのコミュニケーションを管理することはチームのための困難な仕事になることができます.しばしば、これはマルチクラウドクラスタ通信に複雑なVPNと特別なファイアウォール規則を必要とします.
このポストでは、Kubernetesクラスタ間でセキュアなコミュニケーションを可能にするオープンソースプロジェクトSkupperにご紹介します.Skupperは、複数のクラウドプロバイダ、データセンター、地域にまたがるアプリケーションを可能にします.アクションでそれを見ましょう!

始める


このチュートリアルではIstio Bookinfo Application 複数のパブリックおよびプライベートクラスタ間のマイクロサービスサービスは、分散アプリケーション環境で動作するように符号化の変更を必要としません.Skupperでは、アプリケーションはすべてのサービスが同じクラスタで実行されているかのように動作します.
このチュートリアルでは、名前空間のリモート、パブリッククラスタ上でProductPageと格付けサービスを配置しますaws-eu-west そして、詳細とレビューサービスの名前空間内のローカル、オンプレミスクラスタlaptop .

概要


BookInfoサービス展開

上の画像はサービスの展開方法を示しています.
  • 各クラスタはアプリケーションサービスの2つを実行します.
  • ProductPageサービスへの入口ルートは、アプリケーションへのインターネットユーザーアクセスを提供します.
  • すべてのサービスがパブリッククラスタにインストールされている場合、アプリケーションは元々設計されたように動作します.しかし、2つのサービスがラップトップクラスタ上にあるので、アプリケーションは失敗します.ProductPageの詳細やレビューに要求を送信することはできません.
    このデモはSkupperがサービス展開のこの配置によって示される接続性問題を解決する方法を示します.
    図2 - SkupperによるBookInfoサービス配備

    Skupperは、一つ以上のクラスタまたは名前空間で実行しているインストールによる分散システムです.接続されたSkUpperインストールは、各インストールが公開するサービスについての情報を共有します.各Skupperインストールは、どのサービスが他のすべてのインストールで公開されるかを学習します.Skupperは、各名前空間のプロキシサービスエンドポイントを実行します.
  • パブリック名前空間では、詳細とレビュープロキシは、サービスのリクエストを傍受し、Skupperネットワークに転送します.
  • プライベート名前空間では、詳細とレビュープロキシはSkupperネットワークからのリクエストを受け取り、関連するサービスに送信します.
  • プライベート名前空間では、格付けプロキシはサービスのリクエストを傍受し、Skupperネットワークに転送します.
  • パブリック名前空間では、評価プロキシはSkupperネットワークからの要求を受け取り、関連するサービスに送信します.
  • 必要条件


    このチュートリアルを実行するには、次の手順を実行します.
  • The kubectl コマンドラインツール、バージョン1.15以降(installation guide)
  • The skupper コマンドラインツール(installation guide)
  • 選択した任意のプロバイダから選択した任意のクラスタ上の2つのKubernetes名前空間
  • からのYAMLファイルhttps://github.com/skupperproject/skupper-examples-bookinfo.git
  • つのログインコンソール端末、各クラスタまたは名前空間の1つ
  • ステップ1 : BookInfoアプリケーションを配備する


    この手順では、4つのBookInfo MicroServicesのそれぞれにサービスと配備を作成します.
    名前空間aws-eu-west :
    $ kubectl apply -f public-cloud.yaml
    service/productpage created
    deployment.extensions/productpage-v1 created
    service/ratings created
    deployment.extensions/ratings-v1 created
    
    名前空間laptop :
    $ kubectl apply -f private-cloud.yaml 
    service/details created
    deployment.extensions/details-v1 created
    service/reviews created
    deployment.extensions/reviews-v3 created
    

    ステップ2 :パブリックProductPageサービスを公開する


    名前空間aws-eu-west :
    kubectl expose deployment/productpage-v1 --port 9080 --type LoadBalancer
    
    
    BookInfoアプリケーションは、この入口ポートを介して公共のインターネットからアクセスされますproductpage サービス

    ステップ3:アプリケーションが動作しないことを観察


    BookInfoアプリケーションのWebアドレスは、名前空間からaws-eu-west :
    $ echo $(kubectl get service/productpage -o jsonpath='http://{.status.loadBalancer.ingress[0].hostname}:9080')
    
    
    Webブラウザでアドレスを開きます.PropertPageは応答しますが、ページは名前空間のサービスとしてエラーを表示しますlaptop が到達できない.
    我々は今、それを修正することができます.

    ステップ4:Skupperをセットアップする


    このステップは各クラスタ上のskupper環境を初期化する.
    名前空間laptop :
    skupper init
    
    名前空間aws-eu-west :
    skupper init
    
    現在、Skupperインフラストラクチャは走っています.用途skupper status 各コンソール端末では、SkUpperが利用できることを確認します.
    $ skupper status
    Namespace '<ns>' is ready.  It is connected to 0 other namespaces.
    
    
    次の手順を実行すると、使用することができますskupper status いつでもあなたの進捗状況を確認します.

    ステップ5:あなたのskupperインストールを接続してください


    ここで、あなたの名前空間をskupper接続で接続する必要があります.
    これは2段階のプロセスです.
    The skupper connection-token <file> コマンドはSkupperのネットワークに接続するために他のSkupperインスタンスに許可を与える証明書で秘密のトークンファイルを生成するSkupperを指示します.
    注意:ログイン資格情報を保持するファイルに対してこのファイルを保護します.
    The skupper connect <file> コマンドはSkupperに別のSkupperネットワークに接続するよう指示します.これにより、スカアッパ接続が完了する.
    この配置では、Skupperインスタンスはピアネットワークを形成するために結合することに注意してください.典型的に、ネットワークポートのSkupperオープンはパブリッククラスタ上にあります.進行中のクラスタlaptop インターネットから到達可能なアドレスを持っていないかもしれません.接続が終わった後に、Skupperネットワークメンバーはピアであり、どのSkupperがネットワークポートをオープンしたかは問題ではありません.
    このデモのコンソール端末は同じホスト上で同じユーザによって実行されます.これは$ { HOME }ディレクトリのトークンファイルを両方の端末で利用できます.お使いの端末が異なるマシン上にある場合は、使用する必要がありますscp あるいは、トークンファイルをシステムをホストしているシステムに転送するのと同様のツールlaptop 端末.

    Skupperネットワーク接続トークンを生成する


    名前空間aws-eu-west :
    skupper connection-token ${HOME}/PVT-to-PUB-connection-token.yaml
    
    

    スカラップ接続を開く


    名前空間laptop :
    skupper connect ${HOME}/PVT-to-PUB-connection-token.yaml
    

    接続をチェックする


    名前空間aws-eu-west :
    $ skupper status
    Skupper enabled for "aws-eu-west". It is connected to 1 other sites.
    
    
    名前空間laptop :
    $ skupper status
    Skupper enabled for "laptop". It is connected to 1 other sites.
    
    

    ステップ6 :共有するサービスの仮想化


    現在、マルチクラスタ通信ができるSkupperネットワークを持っていますが、サービスはそれに関連付けられていません.このステップはkubectl annotate Skupperネットワークに含まれるサービスがSkupperに通知するコマンド.
    Skupperは、サービスが仮想化されなければならないという徴候として注釈を使います.注釈を受けるサービスはネットワーク要求のための物理的な目標です、そして、他の名前空間でskupper展開するプロキシはネットワーク要求のための仮想目標です.Skupperインフラストラクチャは、仮想サービスとターゲットサービスの間のルート要求をルーティングします.
    名前空間aws-eu-west :
    $ kubectl annotate service ratings skupper.io/proxy=http
    service/ratings annotated
    
    
    名前空間laptop :
    $ kubectl annotate service details skupper.io/proxy=http
    service/details annotated
    
    $ kubectl annotate service reviews skupper.io/proxy=http
    service/reviews annotated
    
    
    Skupperは現在、Skupperネットワークのすべての名前空間に利用可能な注釈付きサービスを作っています.BookInfoアプリケーションは、productpage パブリッククラスタのサービスはdetails and reviews プライベートクラスタ上のサービスとプライベートクラスタ上のレビューサービスとして、パブリッククラスタ上の格付けサービスへのアクセスがあります.

    ステップ7:アプリケーションが動作することを観察する


    BookInfoアプリのWebアドレスは、名前空間から発見することができますaws-eu-west :
    $ echo $(kubectl get service/productpage -o jsonpath='http://{.status.loadBalancer.ingress[0].hostname}:9080')
    
    
    Webブラウザでアドレスを開きます.アプリケーションがエラーなしで動作するはずです.

    クリーンアップ


    SkupperとBookInfoサービスをクラスタから削除することができます.
    名前空間aws-eu-west :
    skupper delete
    kubectl delete -f public-cloud.yaml
    
    
    名前空間laptop :
    skupper delete
    kubectl delete -f private-cloud.yaml 
    

    最後の思考


    マルチクラウドのアプローチを有効にするには多くの利点があり、Skupperのようなツールのおかげで簡単になっています.あなたが時間があるならば、その上でSkupperの他の例のいくらかをためしてくださいGithub Repo . あなたがこのポストから何かを学んだことを願っています.より多くのためにチューニング滞在!