Red Hat - Open Innovation Labsのブログ - TECH PLAY

TECH PLAY

Red Hat  - Open Innovation Labs

Red Hat - Open Innovation Labs の技術ブログ

å…š900ä»¶

クラりドむンフラ党般を担圓しおいる゜リュヌションアヌキテクトの䌊藀です。 今回はRed Hat OpenStack Platform 16の新機胜ず改善ポむントに぀いお玹介いたしたす。 OpenStackはクラりドむンフラを提䟛する゜フトりェアずしお開発されおおり、APIで仮想マシンやネットワヌク、ストレヌゞなどのリ゜ヌスをコントロヌルするこずができ、 AnsibleやOpenShiftずの連携匷化が毎バヌゞョン行われおいたす。 RHOSP16のリリヌスノヌト党文は以䞋のURLをご参照䞋さい。 access.redhat.com ■はじめに 2020幎2月20日にRHEL8初の長期サポヌト版のRHOSPがリリヌスされたした。 RHOSP16は去幎10月にリリヌスされたUpstream版のOpenStack Trainをベヌスにしおおり、今埌リリヌスされる予定ずなっおいるOpenStack Ussuriで搭茉される重芁な機胜が、今回リリヌスされたRHOSP16にも反映する予定ずなっおいたす。 RHOSP16ではOpenShiftずのむンテグレヌションが匷化されおおり、プロキシ環境での利甚やKuryrによるネットワヌク統合、たたオンプレ環境でのOpenShiftのオヌトスケヌルが利甚できたす。 その他、2020幎1月䞋旬にリリヌスされたRed Hat Ceph Storage 4をRHOSPからデプロむするこずができるようになっおおり、RHEL8をベヌスにしたRHOSP16ずRHCS4を合わせお䜿う事でパフォヌマンスが向䞊し぀぀運甚性が向䞊しおいたす。 ■新機胜、倉曎点 ラむフサむクルの倉曎が行われた RHOSP16の党䜓的なサポヌト期間は5幎ず倉わっおおりたせんが、各メンテナンスフェヌズが遷移するタむミングが倉曎されおいたす。 access.redhat.com ホストOSがRHEL8に倉曎されたため、ゲストOSのサポヌト状況が倉わった RHOSP16ではホストOSにおいおRHEL8を䜿甚しおいたす。 以䞋の衚を確認するずRHEL8がホストOSの堎合、サポヌト可胜なゲストOSはRHEL6,7,8、Windows2012R2,2016,2019、SLES10,11,12,15ずなっおいたす。 access.redhat.com ゲストOSずしおWindows Server 2019サポヌト RHOSP16ではWindows Server 2019をサポヌトしおいたす。RHOSP13においおもWindows Server 2019のゲストサポヌトがバックポヌトされたした。 倧芏暡環境のためのCells V2 RHOSP16を甚いお倧芏暡なシングルクラスタを構成する堎合、Cells V2によっお埓来倧芏暡環境でスケヌルの芳点でボトルネックになりやすかった DBずMQを各セルに配眮するこずでスケヌラビリティを確保するこずが可胜になりたした。 access.redhat.com ネットワヌク機胜を提䟛するNeutronのデフォルトプラグむンがML2/OVSからML2/OVNに倉曎 RHOSP15よりML2/OVNがデフォルトのネットワヌクプラグむンずなっおいたす。 OVNではGeneveプロトコルを甚いおオヌバヌレむネットワヌクが構成されおおり、L2の接続性が向䞊しおいたす。 たた、ML/OVSではDVRを甚いお分散ルヌタを構成しおいたしたが、ML2/OVNでは分散構成が暙準です。 access.redhat.com 䜜成枈みのCinderボリュヌムを、むンスタンスにアタッチした状態で拡匵するこずが可胜 Cinderで䜜成したボリュヌムを、in-useステヌタス぀たり皌働䞭であっおも拡匵するこずができたす。 この機胜が有効であるかどうかはCinderバック゚ンドで利甚するストレヌゞ次第です。 DirectorによるRHCSv4の同時デプロむ OpenStack Directorは埓来よりOpenStackずCephを同時にデプロむするこずが可胜でしたが、 RHOSP16からは新しいバヌゞョンであるRed Hat Ceph Storage 4をデプロむするこずが可胜になりたした。 Cinderボリュヌムのクロヌンにおける暗号化キヌの郜床倉曎 Cinderはクロヌンした暗号化ボリュヌムの暗号化キヌを自動で倉曎するこずができたす。 ボリュヌム毎に異なる暗号化キヌを自動で利甚するこずになるので、セキュリティの芳点での安党性が向䞊したした。 Cinderバック゚ンドのAvailability ZoneをDirectorでデプロむ時に蚭定可胜になった 埓来、Cinderバック゚ンドを耇数のAvailability Zoneを甚いお構成する堎合は、 Directorがデプロむ埌に運甚者がAvailability Zoneを指定する必芁がありたしたが、デプロむ時に指定するこずが可胜になっおいたす。 こちらはサポヌト状況がTechnology Previewのステヌタスになっおいたす。 OpenShift4ずのむンテグレヌション OCP4.3のむンフラストラクチャプロバむダヌずしおOpenStackを遞択する堎合、AWSなどパブリッククラりドをむンフラずしお利甚する時ず同様に プロキシ環境、オフラむン環境、OCPで䜿うCoreOSむメヌゞの自動ダりンロヌド、Machine APIを利甚したノヌドのオヌトスケヌルに察応しおいたす。 たたOpenStackずOpenShiftのネットワヌク機胜を統合するKuryrもサポヌトされおいたす。 https://docs.openshift.com/container-platform/4.3/installing/installing_openstack/installing-openstack-installer-custom.html docs.openshift.com シングルノヌドデプロむ RHOSP16のDirectorは、より容易に怜蚌が行えるように1ノヌドにコントロヌラ、コンピュヌト機胜を統合したAll-in-oneノヌドをデプロむするこずができたす。 access.redhat.com Undercloud minion RHOSP16から提䟛されおいるUndercloud minionずいう機胜を甚いるこずでheat-engineずironic-conductorをスケヌルアりトするこずができるようになりたす。 Undercloudのパフォヌマンス぀たりOvercloudのデプロむ、曎新速床を向䞊させるこずが可胜になりたす。 こちらはサポヌト状況がTechnology Previewのステヌタスになっおいたす。 access.redhat.com DirectorからRedfishでOvercloudノヌドのBIOS倉曎を実斜 UndercloudからOvercloudのサヌバのBIOS倉曎を実斜するこずが可胜になりたした。 サヌバに備わっおいるRedfish APIをSushyラむブラリからコントロヌルしおいたす。 こちらはサポヌト状況がTechnology Previewのステヌタスになっおいたす。 ■最埌に OpenStackは初回リリヌスから10幎近くになる゜フトりェアになりたす。IaaSずしおの利甚に十分な機胜、安定性を備え、NFV、Edge、開発者向けの開発環境クラりドなど利甚が広がっおいたす。 今回曎に゚ンタヌプラむズ向けのコンテナ環境を提䟛するOpenShift、オペレヌタが行うコマンド以倖の䌁業党䜓のIT業務の自動化に貢献するAnsible Towerずの連携が匷化されおいたす。 Red Hatでは恵比寿の瀟内にOpenStackの怜蚌を行う環境を備えおいたす。 プラむベヌトクラりドを業務に取り入れるために、想定した業務フロヌずOpenStackが適合するか怜蚌したいがテスト環境が無いずいった、プラむベヌト基盀構築を進めるにあたっおのPoC環境に぀いおもお気軜にご盞談䞋さい。
レッドハットでむンテグレヌションのためのミドルりェア補品のテクニカルサポヌトを担圓しおいる山䞋です。今回は Jiri Pechanec さんによる「DebeziumずApache Camelのむンテグレヌションシナリオ 」の翻蚳蚘事です。 今回の蚘事では、Debeziumによっおデヌタベヌスからの倉曎をキャプチャしおKafkaぞず流し、CamelによるEIPを通しお、Twitterずメヌルに配信する、ずいうシナリオを説明したす。 ずころ今回の蚘事では軜く觊れながらも流しおいるのですが、Kafka Connectランタむム䞊で Camel のコンポヌネントを動䜜させる プロゞェクト が進んでいたす。これによっおCamelが既に持っおいる様々なシステムずのアダプタを利甚しお、容易にKafkaずのデヌタの出し入れができるようになっおいくはずですもちろんオヌプン゜ヌスで。個人的にはこちらも楜しみにしおいるずころ。 [原文] Integration Scenarios with Debezium and Apache Camel by Jiri Pechanec あんたり翻蚳がうたくないのは蚱しおください (^^; Debeziumの兞型的な䜿甚䟋の1぀は、チェンゞデヌタキャプチャ(Change Data Capture)を䜿甚しお、レガシヌシステムを組織内の他のシステムずむンテグレヌションするこずです。 この目暙を達成する方法は耇数ありたす。 Debeziumを䜿甚しおデヌタをKafkaに曞き蟌み、続いおKafka StreamsパむプラむンずKafka Connectコネクタヌの組み合わせお、他のシステムに倉曎を配信する Javaスタンドアロンアプリケヌションで Debezium Embedded engine を䜿甚し、プレヌンJavaを䜿甚しおむンテグレヌションコヌドを蚘述するこれはたびたび倉曎むベントをAmazon Kinesis、Google Pub/Subなどの代替メッセヌゞングむンフラストラクチャに送信するために䜿甚される 既存のむンテグレヌションフレヌムワヌクたたはサヌビスバスを䜿甚しおパむプラむンロゞックを衚珟する この蚘事では、3番目のオプションである専甚のむンテグレヌションフレヌムワヌクに焊点を圓おたす。 Apache Camel Camel は、異なるシステムやサヌビス間でデヌタの読み取り、倉換、ルヌティング、曞き蟌みを行えるようにするオヌプン゜ヌスのむンテグレヌションフレヌムワヌクです。 サヌドパヌティシステムぞのむンタヌフェむスずなる倧量の既補 コンポヌネント や、 EIP : ゚ンタヌプラむズむンテグレヌションパタヌン による実装を支揎したす。 この組み合わせにより、開発者は察象システムに簡単に接続し、宣蚀的なDSLを䜿甚しおむンテグレヌションパむプラむンを衚珟できたす。 Camel ず Debezium Camel 3 は2019幎末にリリヌスされ、新しく再蚭蚈が行われただけでなく、Debeziumコンポヌネントがコヌドベヌスに远加されたした 。 たた、CamelをKafka Connectランタむムで コネクタヌ ずしお䜿甚できるようにしたす。 この投皿はDebeziumコンポヌネントの䜿甚のみに焊点を圓おおおり、埌者のオプションに぀いおは今埌の投皿で取り䞊げる぀もりです。 Debezium MySQL Connector Component Debezium PostgreSQL Connector Component Debezium SQL Server Connector Component Debezium MongoDB Connector Component ご芧のように、すべおの 非むンキュベヌション Debeziumコネクタは専甚コンポヌネントで衚されたす。 この゜リュヌションの利点は、䟝存関係を完党に分離し、コネクタむンスタンスのタむプセヌフな構成ずしおいるこずです。 内郚的にコンポヌネントは、 Debezium ゚ンベデッド゚ンゞン を含んだCamelむベントドリブン コンシュヌマ を甚いお、Debezium ゚ンドポむント を公開したす。 Example 䟋ずしお、StackOverflowのようなシンプルな質問ず回答QAアプリケヌションを䜜成したした。 REST APIを䜿甚するず、新芏の質問や、デヌタベヌスに保存された既存の質問ぞの回答を投皿できたす。 アプリケヌションによっお生成されたデヌタの倉曎たずえば、新芏の質問や回答が䜜成された堎合は、Debeziumを介しおキャプチャされ、Camelパむプラむンに枡されたす。 GitHubでサンプルの完党な ゜ヌスコヌド を芋぀けるこずができたす。 アプリケヌションによっお生成されたデヌタの倉曎新しい質問たたは回答が䜜成された堎合などは、Debeziumによっおキャプチャされ、SMTPサヌバヌを通しお電子メヌルを送信しおTwitterアカりントにツむヌトを投皿するCamelパむプラむンに枡されたす。完党な ゜ヌスコヌド はGitHubにありたす。 トポロゞ ゜リュヌショントポロゞには耇数のコンポヌネントがありたす Figure 1. The Deployment Topology QAアプリケヌションは Quarkus スタックを䜿甚しお実装され、REST APIを公開しお質問ず回答を䜜成 アプリケヌションはPostgreSQLデヌタベヌスにデヌタを保存 Camel routeは、組み蟌みの Infinispan ストアを䜿甚しおその状態を保持する質問ず回答を集玄するオブゞェクトの構築に䜿甚、プレヌンなJavaアプリケヌションずしお実行され、電子メヌルおよび関連するTwitterアカりントを通しお質問に回答 MailHog 電子メヌルを送信するためのコンテナで実行されおいるSMTPサヌバヌ QAアプリケヌション ゜ヌスアプリケヌションは、Quarkusに基づくシンプルなRESTサヌビスです。 PostgreSQLデヌタベヌスに保存されおいる「1n」リレヌションを䜿甚しお、「Question」ず「Answer」の2぀の゚ンティティを管理したす。 Figure 2. The Q&A Backend Service Entity Relationship Diagram ゚ンティティはREST APIを䜿甚しお䜜成され、自動的にそれらの間を関連付けたす。 The Camel Pipeline Camelパむプラむンは、以䞋のビゞネスルヌルを衚珟したす。 䜜成たたは曎新された質問ごずに、質問の䜜成者にメヌルを送信したす 䜜成たたは曎新されたすべおの回答に぀いお、質問ず回答の䜜成者の䞡方にメヌルを送信したす 質問の回答が3぀に達したら、それに関する専甚のTwitterアカりントにツむヌトを投皿したす このビゞネス芁件は、このEIP図で蚘述されたパむプラむンに眮き換えるこずができたす。 Figure 4. The Camel Pipeline コヌドの説明 Debezium Camelコンポヌネントを䜿甚するには、以䞋の䟝存を pom.xml ファむルに远加する必芁がありたす。 <dependencyManagement> <dependencies> <dependency> <groupId> org.apache.camel </groupId> <artifactId> camel-bom </artifactId> <version> ${version.camel} </version> <type> pom </type> <scope> import </scope> </dependency> <!-- Use required Debezium version --> <dependency> <groupId> io.debezium </groupId> <artifactId> debezium-connector-postgres </artifactId> <version> ${version.debezium} </version> </dependency> <dependency> <groupId> io.debezium </groupId> <artifactId> debezium-embedded </artifactId> <version> ${version.debezium} </version> </dependency> <dependency> <groupId> io.debezium </groupId> <artifactId> debezium-core </artifactId> <version> ${version.debezium} </version> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId> org.apache.camel </groupId> <artifactId> camel-core </artifactId> </dependency> <dependency> <groupId> org.apache.camel </groupId> <artifactId> camel-debezium-postgres </artifactId> </dependency> </dependencies> The pipeline logic itself is defined in QaDatabaseUserNotifier class. Its main route looks like tis: パむプラむンロゞック自䜓は QaDatabaseUserNotifier で定矩されおいたす。 Camel ルヌトは以䞋のようになりたす。 public class QaDatabaseUserNotifier extends RouteBuilder { @Override public void configure() throws Exception { from( "debezium-postgres:localhost?" + "databaseHostname={{database.hostname}}" + "&databasePort={{database.port}}" + "&databaseUser={{database.user}}" + "&databasePassword={{database.password}}" + "&databaseDbname=postgres" + "&databaseServerName=qa" + "&schemaWhitelist={{database.schema}}" + "&tableWhitelist={{database.schema}}.question,{{database.schema}}.answer" + "&offsetStorage=org.apache.kafka.connect.storage.MemoryOffsetBackingStore" ) .routeId(QaDatabaseUserNotifier. class .getName() + ".DatabaseReader" ) // ** #1 ** .log(LoggingLevel.DEBUG, "Incoming message ${body} with headers ${headers}" ) .choice() // ** #2 ** .when(isQuestionEvent) .filter(isCreateOrUpdateEvent) // ** #3 ** .convertBodyTo(Question. class ) // ** #4 ** .log(LoggingLevel.TRACE, "Converted to logical class ${body}" ) .bean(store, "readFromStoreAndUpdateIfNeeded" ) // ** #5 ** .to(ROUTE_MAIL_QUESTION_CREATE) // ** #6 ** .endChoice() .when(isAnswerEvent) .filter(isCreateOrUpdateEvent) .convertBodyTo(Answer. class ) .log(LoggingLevel.TRACE, "Converted to logical class ${body}" ) .bean(store, "readFromStoreAndAddAnswer" ) .to(ROUTE_MAIL_ANSWER_CHANGE) .filter(hasManyAnswers) // ** #7 ** .setBody().simple( "Question '${exchangeProperty[aggregate].text}' has " + "many answers (generated at " + Instant.now() + ")" ) .to(TWITTER_SERVER) .end() .endChoice() .otherwise() .log(LoggingLevel.WARN, "Unknown type ${headers[" + DebeziumConstants.HEADER_IDENTIFIER + "]}" ) .endParent(); from(ROUTE_MAIL_QUESTION_CREATE) // ** #6 ** .routeId(QaDatabaseUserNotifier. class .getName() + ".QuestionNotifier" ) .setHeader( "To" ).simple( "${body.email}" ) .setHeader( "Subject" ).simple( "Question created/edited" ) .setBody().simple( "Question '${body.text}' was created or edited" ) .to(SMTP_SERVER); } @Converter public static class Converters { @Converter public static Question questionFromStruct(Struct struct) { // ** #4 ** return new Question(struct.getInt64( "id" ), struct.getString( "text" ), struct.getString( "email" )); } @Converter public static Answer answerFromStruct(Struct struct) { // ** #4 ** return new Answer(struct.getInt64( "id" ), struct.getString( "text" ), struct.getString( "email" ), struct.getInt64( "question_id" )); } } } 説明は以䞋のずおりです。 #1 from はDebezium゜ヌス゚ンドポむントです。 URIパヌツは、コネクタヌ構成オプションに盎接マップしたす #2 パむプラむンロゞックは、倉曎むベントタむプに応じおスプリットされたす。これは゜ヌステヌブルの識別子 <server_name>。<schema_name>。<table_name> を含んだ CamelDebeziumIdentifier のヘッダヌに基づきたす #3 パむプラむンは、曎新ず削陀のみを凊理できるようになりたした。これはメッセヌゞ Envelope の op フィヌルドを含む CamelDebeziumOperation ヘッダヌに基づきたす 4 Kafka Connectの Struct 型は、パむプラむンで䜿甚される論理型に倉換されたす。倉換は、カスタムのCamel コンバヌタヌによっお実行されたす。手軜に利甚できる DebeziumTypeConverter を䜿甚しお Struct を Map に倉換するこずもできたすが、しかしこれはパむプラむンロゞックがテヌブル構造に匷く結合しおしたいたす。 5 メッセヌゞストア ず通信するルヌトが呌び出されたす。Infinispanキャッシュに基づいおメッセヌゞの集玄を䜜成したす。メッセヌゞストアは、質問がすでに保存されおいるかどうかを確認したす。新しい集玄が䜜成されおない堎合には保存し、そうでない堎合には保存されおいる集玄が新しいデヌタで曎新されたす。 6 メヌルメッセヌゞをフォヌマットしお、SMTP゚ンドポむントを介しお質問䜜成者にメヌル配信するルヌトが呌び出されたす。 7 回答メッセヌゞタむプに関連するルヌト郚分は非垞に䌌おいたす回答は質問集玄に远加されたす。䞻な違いは、集玄に3぀の回答が含たれる堎合のTwitterメッセヌゞの投皿です。 補足ですが、シンプルな䟋ずするために、揮発的なメモリを䜿甚しおDebeziumオフセットを栌玍しおいたす。 氞続ストレヌゞの堎合にはファむルベヌスのオフセットストアを䜿甚するか、Infinispanによるカスタムオフセットストア実装を䜜成しおキャッシュにオフセットの保存を任せるこずもできたす。 デモ デモを実行するには、適切なAPIキヌずシヌクレットを備えたTwitter 開発者アカりント が必芁です。 アプリケヌションディレクトリに移動しお、すべおのコンポヌネントをビルドしおください。 $ mvn clean install サヌビスを開始したす独自のTwitter API資栌情報を提䟛したす: $ env TWITTER_CONSUMER_KEY=<...> TWITTER_CONSUMER_SECRET=<...> TWITTER_ACCESS_TOKEN=<...> TWITTER_ACCESS_TOKEN_SECRET=<...> docker-compose up 別のタヌミナルで質問ずそれに3぀の回答を䜜成したす: $ curl -v -X POST -H 'Content-Type: application/json' http://0.0.0.0:8080/question/ -d @src/test/resources/messages/create-question.json $ curl -v -X POST -H 'Content-Type: application/json' http://0.0.0.0:8080/question/1/answer -d @src/test/resources/messages/create-answer1.json $ curl -v -X POST -H 'Content-Type: application/json' http://0.0.0.0:8080/question/1/answer -d @src/test/resources/messages/create-answer2.json $ curl -v -X POST -H 'Content-Type: application/json' http://0.0.0.0:8080/question/1/answer -d @src/test/resources/messages/create-answer3.json Twitterアカりントには、『質問「犬にはいく぀の足がありたすか』などのテキストを含む新しいツむヌトが含たれおいるはずです。たた、[MailHogサヌバヌUI]http// localhost8025 /には次のようなメッセヌゞが衚瀺されたす。 Figure 4. The MailHog Messages たずめ Apache Camelは、システムむンテグレヌションシナリオを実装するための非垞に興味深いオプションです。倖郚のメッセヌゞングむンフラストラクチャを必芁ずせずに、Debeziumコンポヌネントを䜿甚しおスタンドアロンのCamelルヌトを展開するのは非垞に簡単で、デヌタの倉曎をキャプチャし、耇雑なルヌティングおよび倉換操䜜を実行できたす。 Camelは、耇雑なサヌビスオヌケストレヌションに含たれる可胜性のあるさたざたなシステム甚の100を超えるコネクタだけでなく、EIP : ゚ンタヌプラむズむンテグレヌションパタヌンの完党な実装を開発者に提䟛したす。 今回の䟋の完党な゜ヌスコヌドは GitHub から入手できたす。 Debeziumに぀いお Debeziumは、既存のデヌタベヌスをむベントストリヌムに倉換するオヌプン゜ヌスの分散プラットフォヌムです。アプリケヌションは、デヌタベヌス内にコミットされた行レベルの倉曎をほずんど瞬時に確認しお反応するこずができたす。 Debeziumは Kafka の䞊に構築され、特定のデヌタベヌスを監芖する Kafka Connect 互換コネクタを提䟛したす。Debeziumはデヌタ倉曎の履歎をKafkaログに蚘録するため、アプリケヌションはい぀でも停止や再起動するこずができ、実行䞭に芋逃したすべおのむベントを簡単に消費できるため、すべおのむベントを正しく完党に凊理するこずができたす。 Debeziumは Apache License、Version 2.0 であり オヌプン゜ヌス です。 参加しよう Debeziumに興味を持ち詊しおみおほしいず思いたす。 Twitter @debezium 、 Gitterでチャット 、たたは メヌリングリスト でコミュニティず話すこずができたす。 すべおのコヌドは GitHub でオヌプン゜ヌスです。したがっお、コヌドをロヌカルでビルドし、既存のコネクタを改善し、さらにコネクタを远加できたす。 問題を発芋したり、Debeziumの改善方法に぀いおアむデアをお持ちの堎合は、お知らせいただくか 問題を蚘録 しおください。 Jiri Pechanec Jiriは、Red Hatの゜フトりェア開発者そしお元QA゚ンゞニアです。 Javaおよびシステムむンテグレヌションプロゞェクトずそのタスクで倚くのキャリアを積んできたした。チェコ共和囜のブルノの近くに䜏んでいたす。 [ github ] [ linkedin ]
この蚘事は、Quarkus.io のブログ蚘事、 Quarkus wins DEVIES award の翻蚳蚘事です。 2020幎1月22日、私たちはQuarkusがDeveloperWeek DEVIES 賞のBest Innovation in:Code Frameworks/Libraries郚門で受賞したこずを知りたした。KubernetesネむティブなJavaスタックずしおのQuarkusは、コンテナやマむクロサヌビス、サヌバレスずいったクラりドネむティブなアプリケヌションアヌキテクチャにJavaを適合させる、珟代のアプリケヌション開発における根本的な倉化を衚しおいたす。Java開発者は、Quarkusを䜿甚しお、起動時間が短く、メモリ䜿甚量が倧幅に少ないアプリケヌションを構築できたす。Quarkusは、すぐに䜿える状態で、䞀般的なJava暙準、フレヌムワヌク、およびラむブラリに察応しおいたす。開発者はアプリケヌションに必芁なJavaフレヌムワヌクを遞ぶこずができ、JVMモヌドで実行するこずも、コンパむルしおネむティブモヌドで実行するこずもできる。Quarkusには、実行䞭のアプリケヌションに゜ヌスコヌドの倉曎を即座に適甚するラむブコヌディング、組み蟌みのマネヌゞドむベントバスを䜿甚した呜什型プログラミングずリアクティブプログラミング、構成の統䞀、ネむティブ実行可胜ファむルの容易な生成など、開発者の生産性向䞊機胜が含たれおいたす。Quarkusは埓来のJavaに比べおメモリ消費量が1/10になるようにアプリケヌションを構築し、起動時間が300倍速くなり、クラりドリ゜ヌスのコストを倧幅に削枛するこずができたす。 Quarkusコミュニティはこの賞を受賞するこずに興奮しおおり、DeveloperWeek DEVIESの審査員の信任投祚に感謝の意を衚したいです。私たちにずっお、これは正しい道を歩んでいるこずを意味し、コミュニティのすべおのメンバヌが日々プロゞェクトに泚ぎ蟌んでいる骚の折れる努力を正圓化するものです。これにより、私たちは、ハむブリッドクラりドの䞖界で開発者や組織のニヌズを満たすために、Quarkusにむノベヌションをもたらし続けるために、さらに懞呜に取り組むこずができたす。 最埌に、コヌド、プルリク゚スト、問題䜜成、ドキュメント、りェビナヌ、ビデオ、曞籍、Quarkusのヒント、蚘事、ブログ投皿など、Quarkusの開発に貢献しおくれた䞖界䞭のすべおの人に感謝したいず思いたす。珟圚進行䞭の革新的な仕事がたくさんありたすので、この機䌚に私たちのコミュニティに参加しおいただきたいず思いたす。あなたの意芋ず貢献は、Quarkusが今埌も成長を続け、開発者コミュニティのすべおの人々に貢献するのに圹立ちたす。 Quark物質の基瀎単䜍であるず考えられおいる理論䞊の粒子しおハドロン匷い力を及がし合う玠粒子の総称を䜜り続けよう!
Red Hat ゜リュヌションアヌキテクトの小島です。 ゚ンタヌプラむズ甚途でコンテナアプリを開発・運甚しおいく際には、コンテナむメヌゞのバックアップ、バヌゞョン管理、構成やセキュリティ基準の暙準化などのいく぀かの理由により、専甚のコンテナむメヌゞレゞストリが必芁になっおきたす。本蚘事ではKubernetesやOpenShiftなどのコンテナ環境に利甚できる、分散型コンテナむメヌゞレゞストリQuayをご玹介したす。 Quayずは Quayの提䟛圢態 Operatorを利甚したRed Hat Quayのむンストヌルの前準備 Operatorを利甚したRed Hat Quayのむンストヌル (GUI) Operatorを利甚したRed Hat Quayのむンストヌル (CLI) Red Hat Quayの䜿甚 Clairによるコンテナむメヌゞ脆匱性の静的解析 たずめ References Quayずは QuayはKubernetesやOpenShiftなどのコンテナ環境甚のコンテナむメヌゞレゞストリです。最初は2013幎にQuay.ioずいうSaaS型のサヌビスずしお提䟛しおいたものを、2014幎にCoreOSが買収しおからオンプレミス版のQuay Enterpriseも提䟛するようになりたした。そしお2018幎1月にRed HatがCoreOSを買収しおからは、Quay EnterpriseをRed Hat Quayずいう名前に倉曎しお提䟛しおいたす。元々OpenShift環境の堎合だず自動的に内郚レゞストリが䜜成され、それを利甚しお耇数の開発チヌムでのコンテナむメヌゞの共同開発・メンテナンスができるのですが、Quayは䞋蚘のような特城を備えおおり、゚ンタヌプラむズでのレゞストリ利甚をより匷力に促進しおいたす。 リポゞトリ䜿甚状況の可芖化 (い぀誰がむメヌゞをPush/Pullしたか、などの情報を保持) Clairず連携したコンテナむメヌゞ脆匱性情報の可芖化 リポゞトリぞのむメヌゞPushやむメヌゞ脆匱性怜知時などのむベントの自動通知 OpenShift環境ずは独立した認蚌情報の利甚 (LDAPやOpenID Connectなど) registry.redhat.ioなど倖郚レゞストリからのリポゞトリの自動ミラヌリング Geo-Replicationによる遠隔地ぞの非同期コピヌ GitHubなどのWebhookを利甚した、Dockerfileからのむメヌゞ自動ビルド OAuth 2 RESTful APIによる倖郚アプリずの連携 様々なパブリック/プラむベヌトのクラりドストレヌゞサヌビスをQuayのバック゚ンドストレヌゞずしお利甚可胜 2020幎2月時点では、Amazon S3, Azure Blob Storage, Google Cloud Storage, Ceph Object Gateway, OpenStack Swift, OpenShift Container Storage 4 ずいったクラりドストレヌゞサヌビスを、Quayのバック゚ンドストレヌゞずしお利甚できたす。OpenShift Container Storageに぀いおは䞋蚘をご参照ください。 rheb.hatenablog.com 䞊蚘の特城を備えおいるため、セキュリティを考慮したDevSecOpsや、倧芏暡なKubernetes/OpenShift環境甚の分散レゞストリずしおの利甚がQuayのメむンナヌスケヌスずなりたす。分散レゞストリずしお利甚する堎合はリポゞトリミラヌリングやGeo-Replicationによっお、グロヌバルな環境でコンテナむメヌゞを共有・開発・運甚しおいくむメヌゞが䞀䟋ずしお挙げられたす。 なお、Kubernetes/OpenShiftのマルチクラスタに察しお、1぀のAPIからサヌビスをデプロむできるようになる Kubernetes KubeFed ずいうOSSのプロゞェクトがありたす。こうした機胜ずQuayやOpenShiftを組み合わせるず、倧芏暡なコンテナ環境に察しおセキュリティ基準や運甚手法を統䞀できるため、ガバナンスを効かせやすくなりたす。KubeFedのデモ動画を参照したり、Katacodaを利甚しお KubeFedを䜓感 できたすので、これらのWebペヌゞもご参照ください。 Using KubeFed to Deploy Applications to OCP3 and OCP4 Clusters Quayの提䟛圢態 2020幎2月時点では䞋蚘の2皮類です。 Red Hat Quay.io (SaaS版のQuay) Red Hat Quay (オンプレミス版のQuay) この他に、Red Hat Quay.ioずRed Hat Quayの゜ヌスコヌドをベヌスにオヌプン゜ヌス化した Project Quay がありたす。元々Quayはプロプラむ゚タリ・゜フトりェアでしたが、2019幎11月に オヌプン゜ヌス化したProject Quayをリリヌス しおいたす。今埌はProject QuayがRed Hat Quay.ioずRed Hat Quayのアップストリヌムになりたす。 SaaS版のQuay.ioに぀いおは、アカりントを䜜成しお利甚プランを遞択するだけで䜿っおみるこずができたす。利甚プランは耇数ありたすが、どのプランでも30日間の無料トラむアルを利甚でき、か぀、パブリックなリポゞトリは無制限に利甚できたす。無料期間が終了した埌も、珟時点では 15USドル/1ヶ月~ で利甚できたすので最初の利甚ハヌドルは比范的䜎くなっおいたす。 quay.io Operatorを利甚したRed Hat Quayのむンストヌルの前準備 オンプレミス版のRed Hat Quayをむンストヌルするには、䞋蚘の手順のいずれかを実行したす。いずれの手順でも、Red Hatが提䟛しおいるQuayのコンテナむメヌゞをダりンロヌドしおデプロむしたす。 Deploy Red Hat Quay - Basic (Quayのテスト甚デプロむ) Deploy Red Hat Quay on OpenShift Deploy Red Hat Quay on OpenShift with Quay Setup Operator Deploy Red Hat Quay - High Availability (オンプレやパブリッククラりド䞊に高可甚性なQuay環境をデプロむ) ここではOpenShift 4のOperatorを利甚したRed Hat Quayのむンストヌル手順を玹介しおいきたす。2020幎2月時点の最新バヌゞョンであるOpenShift 4.3の利甚をここでは想定したす。Red Hat Quayは、2019幎12月にリリヌスされた3.2からOperatorを利甚したむンストヌル手順を正匏にサポヌトするようになりたした。 www.redhat.com Operatorにより、Red Hat Quayをずおも簡単にOpenShift 4の環境䞊にむンストヌルできるようになっおいたす。Operatorによるむンストヌルには、前提条件が2぀ありたす。 OpenShiftクラスタの管理暩限(cluster-adminナヌザなどの暩限)を利甚 Red Hat Quayのコンテナむメヌゞを取埗するための 認蚌情報 認蚌情報を取埗した埌は、䞋蚘のようなコマンドを実行しおQuayをむンストヌルするプロゞェクト(この䟋ではquay-enterprise)䞊にSecretを䜜成したす。 $ cat << EOF > redhat-quay-pull-secret.yaml apiVersion: v1 kind: Secret metadata: name: redhat-pull-secret data: .dockerconfigjson: XXXXXXXXXX type: kubernetes.io/dockerconfigjson EOF $ oc login -u kubeadmin <OpenShift 4環境のAPI URL> $ oc new-project quay-enterprise $ oc create -f redhat-quay-pull-secret.yaml secret/redhat-pull-secret created これで前準備は完了です。 Operatorを利甚したRed Hat Quayのむンストヌル (GUI) quay-enterpriseプロゞェクト䞊で、OpenShift 4のOperator HubからQuayのOperatorを遞択しおむンストヌルしたす。むンストヌル時に遞択するものは、党おデフォルト倀のたたで「Subscribe」をクリックしたす。 これにより、Quay OperatorがPodずしおセットアップされたす。quay-operator-xxxxずいう名前のPodがRunning/Ready状態になればOperatorのセットアップは完了です。このOperatorからQuay環境を自動䜜成・削陀できるようになりたす。「Installed Operators」->「Quay」->「QuayEcosystem」->「Create QuayEcosystem」ず遞択しおいき、䞋蚘のようなYAMLファむルを入力しお「Create」をクリックすればQuay環境が自動的に䜜成されたす。このYAMLファむルではQuayや埌述するClairのコンテナむメヌゞをPullするためのSecretずしお、䞊蚘手順で䜜成した「redhat-pull-secret」Secretを指定しおいたす。これにより、example-quayecosystem-xxxxずいう名前のQuay関連のPod郡がquay-enterpriseプロゞェクト䞊に䜜成されおいきたす。 apiVersion: redhatcop.redhat.io/v1alpha1 kind: QuayEcosystem metadata: name: example-quayecosystem spec: quay: imagePullSecretName: redhat-pull-secret enableRepoMirroring: true clair: enabled: true imagePullSecretName: redhat-pull-secret もし、いずれかのPodがNot ReadyやCrashLoopBackOffなどの状態になっおいおQuayのむンストヌルが進たない堎合は、䞀床䜜成したQuayEcosystemを削陀しお、再䜜成しおみおください。その堎合は、䜜成したQuayEcosystemの名前をクリックしお、「Actions」->「Delete QuayEcosystem」から削陀ができたす。このずき、quay-operator-xxxxずいうPodによりQuay関連のPod郡が自動的に削陀されたす。 䞋蚘のようにexample-quayecosystem-xxxxずいうPodが党おRunning/Ready状態になり、example-quayecosystem-quayずいうRouteが䜜成された状態になれば、Quayのむンストヌルは完了です。Quay Operatorにより、PostgreSQL(QuayずClairのメタデヌタ栌玍甚)、Redis(Quayのチュヌトリアルやラむブビルドログ栌玍甚)、Quay、ClairのPodが自動的に䜜成されおいるこずを確認できたす。 Operatorを利甚したRed Hat Quayのむンストヌル (CLI) CLIを䜿甚しおOperator及びRed Hat Quayをむンストヌルする堎合は、䞋蚘のコマンドを実行したす。QuayのOperator GroupずSubscriptionを䜜成するず、Quay Operatorがデプロむされたす。Quay Operatorを利甚しお quayecosystem ずいうリ゜ヌスを䜜成するこずでQuay関連のPod郡がデプロむされたす。 $ cat << EOF > quay-operatorgroup.yaml apiVersion: operators.coreos.com/v1 kind: OperatorGroup metadata: generateName: "quay-enterprise-" namespace: quay-enterprise spec: targetNamespaces: - quay-enterprise EOF $ oc create -f quay-operatorgroup.yaml $ cat << EOF > quay-subscription.yaml apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: generateName: "quay-operator-" namespace: quay-enterprise spec: channel: stable installPlanApproval: Automatic name: quay source: community-operators sourceNamespace: openshift-marketplace EOF $ oc create -f quay-subscription.yaml $ cat << EOF > quay-clair-ecosystem.yaml apiVersion: redhatcop.redhat.io/v1alpha1 kind: QuayEcosystem metadata: name: example-quayecosystem namespace: quay-enterprise spec: quay: imagePullSecretName: redhat-pull-secret enableRepoMirroring: true clair: enabled: true imagePullSecretName: redhat-pull-secret EOF $ oc create -f quay-clair-ecosystem.yaml (参考) 4.1.2. CLI を䜿甚した OperatorHub からのむンストヌル Operatorを利甚したQuayの削陀、及び、クラスタヌからQuay Operatorを削陀する堎合は、䞋蚘のようなコマンドを実行したす。 $ oc delete quayecosystem/example-quayecosystem -n quay-enterprise <- "oc get quayecosystem"で取埗したQuay Ecosystemの名前を指定 $ oc delete subscription/quay-operator-xxxxx -n quay-enterprise <- "oc get subscription"で取埗したQuay Subscriptionの名前を指定 $ oc delete clusterserviceversion/quay.v1.0.1 -n quay-enterprise <- "oc get clusterserviceversion"で取埗したQuayのCluster Service Versionの名前を指定 (参考) 5.2. CLI の䜿甚によるクラスタヌからの Operator の削陀 Red Hat Quayの䜿甚 䞊蚘のRouteで衚瀺されおいるURLにアクセスしお、Red Hat Quayにログむンしたす。デフォルトのログむンアカりントは Username: quay, Password: password です。 むメヌゞリポゞトリの䜜成ずPush/Pullを詊しおみたい堎合は、䞊郚の「TUTORIAL」から指定される手順を実斜しおみるずいいでしょう。ただし、TUTORIALで指定される手順はroot暩限を必芁ずするDockerの利甚を前提ずしおいたすので、非管理ナヌザで詊しお芋る堎合は、䞋蚘のようなPodmanを䜿う手順を詊しおみるこずもできたす。やっおいるこずは単玔で、busyboxずいう名前のコンテナむメヌゞをPullしおきおカスタムリポゞトリにPushしおいるだけです。 $ podman login --tls-verify=false -u=quay -p=password example-quayecosystem-quay-XXXXXX.net $ podman pull busybox $ podman images $ podman tag <busyboxむメヌゞのContainer ID> example-quayecosystem-quay-XXXXXX.net/quay/testbusybox <- QuayのURLの埌にナヌザ名(quay)ず䜜成するリポゞトリ名(testbusybox)を指定 $ podman push --tls-verify=false example-quayecosystem-quay-XXXXXX.net/quay/testbusybox この手順によりtestbusyboxずいう名前のリポゞトリが䜜成されるこずを確認できたす。このリポゞトリからむメヌゞをPullする堎合は䞋蚘のようなコマンドを実行したす。 $ podman pull --tls-verify=false example-quayecosystem-quay-XXXXXX.net/quay/testbusybox こうしたリポゞトリに察するPush/PullのログをQuayのWebコン゜ヌルから確認できたす。たた、䞍芁になったリポゞトリは、リポゞトリの蚭定メニュヌから削陀できたす。 カスタムリポゞトリに察するコンテナむメヌゞのPushやPullはSaaS版のQuay.ioでもできたすが、オンプレミス版のQuayだず倖郚レゞストリを指定したリポゞトリのミラヌリングを自動実行できるようになりたす。ミラヌリングには skopeo ずいうレゞストリに察するむメヌゞの情報取埗・コピヌ・削陀機胜を持぀゜フトりェアを利甚しおいたす。蚭定手順は次の補品ドキュメントに沿っお行いたすが、基本的には以䞋の流れです。 Chapter 7. Repository Mirroring in Red Hat Quay ミラヌリングに利甚する空リポゞトリを䜜成 リポゞトリの蚭定画面から、䞊蚘リポゞトリのRepository Stateを「Mirror」に倉曎 䞊蚘リポゞトリに曞き蟌み暩限を持぀、ミラヌリング甚のロボットアカりントを䜜成 リポゞトリのミラヌリング蚭定画面から、ミラヌリング察象のリポゞトリのURL/認蚌情報、同期間隔などを蚭定しお同期開始 同期間隔の単䜍は、秒/分/時間/日/週のいずれかを指定できたす。䞋蚘の䟋だずDocker Hubにあるlatestタグが぀いたbusyboxコンテナむメヌゞを、mirror-busyboxずいうリポゞトリに30秒間隔で同期を取る蚭定にしおいたす。 リポゞトリのミラヌリングログも保存されたす。これもコンテナむメヌゞのPush/Pullの堎合ず同様にWebコン゜ヌルから確認できたす。ミラヌリング機胜により耇数拠点にあるコンテナむメヌゞレゞストリの同期が取りやすくなりたす。 たた、リポゞトリの蚭定画面から、リポゞトリに察する倉曎があったずきの自動通知も蚭定できたす。リポゞトリぞのPush、ミラヌリング、パッケヌゞの脆匱性発芋などのむベント発生時に、Quayナヌザアカりントぞの通知、Slack、HipChatなどを利甚した通知を蚭定できたす。 (参考) Chapter 5. Repository Notifications Clairによるコンテナむメヌゞ脆匱性の静的解析 Quay.ioずQuayではコンテナむメヌゞ脆匱性の静的解析に Clair ずいう゜フトりェアを利甚しおいたす。Clairは公開されおいる脆匱性情報を定期的に取埗し、コンテナむメヌゞ脆匱性の静的解析を行いたす。Clairが取埗する脆匱性情報は Red HatやNISTなどが公開しおいるもの であり、これらの脆匱性情報に察応する皮類のコンテナむメヌゞを解析できたす。なお、公開しおいる脆匱性情報に該圓するかを評䟡・報告するための蚀語仕様ずしお OVAL ずいうものがあり、この仕様に準拠した圢匏で実装されおいるOVALファむルを脆匱性怜査に利甚したす。䟋えばRed HatはRHELの脆匱性怜査に利甚する OVALファむルを公開 しおいたすが、こうしたファむルをRHEL7やRHEL8のコンテナむメヌゞの脆匱性解析に利甚しおいたす。ClairはRHELなどのコンテナむメヌゞをPushするず、自動的にスキャンを実行しおどのような脆匱性があるかを報告したす。 Clairはデフォルトでは500分に1回の頻床で脆匱性怜査に利甚する内郚デヌタベヌスを曎新したすが、この曎新頻床を倉曎するこずもできたす。その堎合は、QuayEcosystemを䜜成するずきに指定するYAMLファむルに updateInterval を远加したす。䞋蚘の䟋だず60分に1回の曎新頻床を指定しおいたす。 apiVersion: redhatcop.redhat.io/v1alpha1 kind: QuayEcosystem metadata: name: example-quayecosystem spec: quay: imagePullSecretName: redhat-pull-secret enableRepoMirroring: true clair: enabled: true imagePullSecretName: redhat-pull-secret updateInterval: "60m" さらに、Clairを利甚しおOpenShift環境党䜓のコンテナむメヌゞの脆匱性の静的解析を行うこずができたす。この機胜を利甚する堎合は、 Container Security Operator(CSO) をOperator Hubからむンストヌルしたす。CSOをむンストヌルする堎合もデフォルト倀から倉曎しなくおOKです。 CLIを䜿甚しおCSOをむンストヌルする堎合は、䞋蚘のコマンドを実行したす。 $ cat << EOF > container-security-subscription.yaml apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: generateName: "container-security-operator-" namespace: openshift-operators spec: channel: alpha installPlanApproval: Automatic name: container-security-operator source: community-operators sourceNamespace: openshift-marketplace EOF $ oc create -f container-security-subscription.yaml CSOがむンストヌルされるず、container-security-operator-xxxxずいうPodがopenshift-operatorsずいうプロゞェクトに䜜成されたす。このPodがKubernetes APIを利甚しお、Kubernetes/OpenShift環境にあるコンテナむメヌゞの脆匱性を怜査したす。怜査結果の抂芁はダッシュボヌドから確認できたす。怜知した脆匱性がどのくらいあるかを可芖化したす。 今回の堎合だず、衚瀺されおいるパッケヌゞ名に、OpenShift 4やQuayをむンストヌルする時にPullしおきたQuay.ioにあるRed Hatリポゞトリのむメヌゞマニフェストのリンクが貌られおいたすが、ほずんどの方はQuay.ioのRed Hatのリポゞトリにアクセスするためのアカりントを持っおいないので、マニフェストが芋぀かりたせんずいうメッセヌゞしかおそらく衚瀺されないず思いたす。そこで、脆匱性の情報はYAML圢匏で確認したす。「1 namespaces」ずいったリンクをクリックするず、ImageManifestVulnずいう脆匱性情報を持ったリ゜ヌスが確認できたすので、そちらからYAML圢匏で脆匱性情報を確認したす。 ImageManifestVulnの情報はocコマンドでも衚瀺できたす。その堎合は oc get ImageManifestVuln を実行したす。これで脆匱性情報をCLIからでも確認できたす。こうしお確認した脆匱性情報をもずに、コンテナむメヌゞを随時曎新・再デプロむするこずで、既知の脆匱性を攟眮する危険性を少なくできたす。 $ oc get ImageManifestVuln --all-namespaces NAMESPACE NAME AGE quay-enterprise sha256.5073e39508248811c10398ce1dbb59d753ff47f690eb97e7938b80e13c628ab7 17m quay-enterprise sha256.93b911c720930a49d327f8f97c38dcd510db0692251f139ed709cb83fe00f903 17m quay-enterprise sha256.af7de1465d9992b8c5756723f75190d80ca8b18a08a0be7971792668120ee92d 17m $ oc get ImageManifestVuln/sha256.5073e39508248811c10398ce1dbb59d753ff47f690eb97e7938b80e13c628ab7 -o yaml -n quay-enterprise apiVersion: secscan.quay.redhat.com/v1alpha1 kind: ImageManifestVuln metadata: creationTimestamp: "2020-02-15T08:25:46Z" generation: 1 labels: quay-enterprise/example-quayecosystem-clair-556ff76bd6-g8zs2: "true" name: sha256.5073e39508248811c10398ce1dbb59d753ff47f690eb97e7938b80e13c628ab7 namespace: quay-enterprise resourceVersion: "124174" selfLink: /apis/secscan.quay.redhat.com/v1alpha1/namespaces/quay-enterprise/imagemanifestvulns/sha256.5073e39508248811c10398ce1dbb59d753ff47f690eb97e7938b80e13c628ab7 uid: a84d2fb0-8991-4ac0-83e7-ee86cbd07334 spec: features: - name: perl-Git namespaceName: centos:7 version: 1.8.3.1-20.el7 versionformat: rpm vulnerabilities: - description: 'Git is a distributed revision control system with a decentralized architecture. As opposed to centralized version control systems with a client-server model, Git ensures that each working copy of a Git repository is an exact copy with complete revision history. This not only allows the user to work on and contribute to projects without the need to have permission to push the changes to their official repositories, but also makes it possible for the user to work with no network connection. Security Fix(es): * git: Remote code execution in recursive clones with nested submodules (CVE-2019-1387) For more details about the security issue(s), including the impact, a CVSS score, acknowledgments, and other related information, refer to the CVE page(s) listed in the References section.' fixedby: 0:1.8.3.1-21.el7_7 link: https://access.redhat.com/errata/RHSA-2020:0124 name: RHSA-2020:0124 namespaceName: centos:7 severity: High - name: sqlite namespaceName: centos:7 version: 3.7.17-8.el7 versionformat: rpm vulnerabilities: - description: 'SQLite is a C library that implements an SQL database engine. A large subset of SQL92 is supported. A complete database is stored in a single disk file. The API is designed for convenience and ease of use. Applications that link against SQLite can enjoy the power and flexibility of an SQL database without the administrative hassles of supporting a separate database server. Security Fix(es): * sqlite: fts3: improve shadow table corruption detection (CVE-2019-13734) For more details about the security issue(s), including the impact, a CVSS score, acknowledgments, and other related information, refer to the CVE page(s) listed in the References section.' fixedby: 0:3.7.17-8.el7_7.1 link: https://access.redhat.com/errata/RHSA-2020:0227 name: RHSA-2020:0227 namespaceName: centos:7 severity: High - name: git namespaceName: centos:7 version: 1.8.3.1-20.el7 versionformat: rpm vulnerabilities: - description: 'Git is a distributed revision control system with a decentralized architecture. As opposed to centralized version control systems with a client-server model, Git ensures that each working copy of a Git repository is an exact copy with complete revision history. This not only allows the user to work on and contribute to projects without the need to have permission to push the changes to their official repositories, but also makes it possible for the user to work with no network connection. Security Fix(es): * git: Remote code execution in recursive clones with nested submodules (CVE-2019-1387) For more details about the security issue(s), including the impact, a CVSS score, acknowledgments, and other related information, refer to the CVE page(s) listed in the References section.' fixedby: 0:1.8.3.1-21.el7_7 link: https://access.redhat.com/errata/RHSA-2020:0124 name: RHSA-2020:0124 namespaceName: centos:7 severity: High image: quay.io/redhat/clair-jwt manifest: sha256:5073e39508248811c10398ce1dbb59d753ff47f690eb97e7938b80e13c628ab7 namespaceName: centos:7 status: affectedPods: quay-enterprise/example-quayecosystem-clair-556ff76bd6-g8zs2: - cri-o://56c8f9dc4a68d3b02875b214721a0536d5f683d8c29ebf4382e6157168450626 fixableCount: 3 highCount: 3 highestSeverity: High lastUpdate: 2020-02-15 08:25:46.564070808 +0000 UTC たずめ QuayずClairの抂芁や、Operatorによる基本的なセットアップ手順ず利甚手順を䞀通り玹介しおきたした。より詳现な情報に぀いおは䞋蚘の参考情報もご参照ください。 References Red Hat QuayずProject Quayの参考情報の䞀芧です。 Product Documentation for Red Hat Quay 3 - Red Hat Customer Portal Red Hat Quay Life Cycle Policy - Red Hat Customer Portal Red Hat Quay Support Policy - Red Hat Customer Portal Quay Enterprise 3.x Tested Integrations - Red Hat Customer Portal https://www.projectquay.io
Happy Valentine's Day! Red Hatの久保田です。 さお、オリンピックを前にリモヌトワヌクを準備しおいた皆様の䞭には、この数週間で急遜リモヌトワヌクに切り替えた方も倚いのではないでしょうか。 Red Hatではリモヌトで働く瀟員が倚く、日本からアメリカの組織で働く瀟員もいたすし、電話䌚議をするず自宅の曞斎やリビングから参加する人も倚いです。ペットの声が聞こえるこずもよくありたす。 先日は䌚議盞手の背景にプヌルが芋えたした。 私的ldapsearchによるず、今Remoteずしお登録しおいる瀟員数は䞖界で7000人以䞊。 日本から䞖界のオフィスにリモヌトで働いおいるのは100人匱のようです。 今回はリモヌトワヌクをする際のマむルヌル、セキュリティずオヌプン゜ヌスを䞭心に翻蚳しおみたした。 ティヌポットず矎味しい玅茶の葉、クッキヌを甚意しお読んでみおください。 ブログ著者の玹介 マむク・バヌれル 2016幎8月からRed HatのCTOオフィスに圚籍し、セキュリティ、仮想化、ネットワヌクなどに埓事。 ゜フトりェア゚ンゞニアリングのトレヌニングの埌、分散システムずセキュリティに特化する。この数幎はアヌキテクチャず技術ストラテゞヌに携わる。Red Hatではセキュリティストラテゞヌ、内倖向けの掻動、リヌダヌシップを担圓。 Enarxプロゞェクトの共同創立者の䞀人。北米、ペヌロッパ、APACの業界むベントで講挔を行う。 興味はLinux、コンフィデンシャル・コンピュヌティング、オヌプン゜ヌス゜フトりェア、セキュリティ、分散システム、ブロックチェヌン、NFV、SDN、仮想化 ケンブリッゞ倧孊修士号、オヌプン倧孊のMBA aliceevebob.com むギリス人の語る、リモヌトワヌクのコツずは aliceevebob.com ブラりザがHTTPSでないサむトに譊告を出すようになり、この”S"の郚分に気付く方も倚くなったのではないでしょうか。 コンフィデンシャルコンピュヌティングにも泚目が集たっおいたす。 aliceevebob.com オヌプン゜ヌスのセキュリティっおどうなの 経枈孊も亀えお、プロゞェクトずプロダクト、そのセキュリティに関しおの蚘事です。 aliceevebob.com ハッカヌもクラッカヌも、オヌプン゜ヌスを䜿いたす。 オヌプン゜ヌスはどんな人にも”オヌプン”です。 奥が深く考えさせられたす。 aliceevebob.com トラスト信甚、信頌はセキュリティでは鍵です。 オヌプン゜ヌスにおける信頌性ずはどうなっおいるのか。 aliceevebob.com オヌプン゜ヌスはその名の通り、オヌプンです。 ではパヌフェクトかずいうず、そうでもない。 でもそこに近づけるこずはできたす。 それにはさらにたくさんの方の参加が必芁です。 さお、ブログ蚘事ではないのですが、Red HatではCO.LABずいうプロゞェクトがありたす。 www.redhat.com オヌプン゜ヌスを次の䞖代に、特に女性にも貢献しおもらおうずいうのものです。 今はUSだけの掻動ですが、日本でも広めお行けたらず思っおおりたすのでよろしくお願いいたしたす
この蚘事は、Quarkus.io のブログ蚘事、 Quarkus 1.2.0.Final released - GraalVM 19.3.1 support, Metrics, Cache extension, and more の翻蚳蚘事です。 前回のQuarkusの修正から1ヶ月が経過し、みなさんも頻繁なリリヌスにも慣れおきたしたので、1.2.0.Final がリリヌスされたした。私たちは倚くの新しい機胜を提䟛するために努力しおきたした:GraalVM 19.3 .1のサポヌトが぀いにされ、すべおを簡単にキャッシュするために新しいキャッシュ拡匵機胜を远加し、いく぀かの拡匵機胜のためのデフォルト蚈量機胜を远加し、私たちのHashiCorp Vaultサポヌトが倧幅に改善するなど倚くのものを提䟛したした。 既存のアプリケヌションを移行したいずお考えですかここに 1.2.0.Finalの移行ガむドがありたす 。 このすべおに぀いおさらに孊ぶこずに興奮しおいたすかこれらの新機胜に぀いお詳しく説明したす。 䜕が新しいの GraalVM 19.3 .1のサポヌト 1.2.0.Finalは3皮類のGraalVMをサポヌトしおいたす。 GraalVM 19.2 .1-JDK8 (これは1.3に廃止されたす。) GraalVM 19.3 .1-JDK8 GraalVM 19.3 .1-JDK11 (JDK11です!) Red HatのOpenJDKチヌムずGraalVMチヌムず䞀緒に、私たちは぀いに19.3ブランチで遭遇したすべおの問題に打ち勝ち、19.3.1で我々に必芁な最新の修正を提䟛したした。 最埌に、ネむティブの実行可胜ファむルを構築する堎合でも、みなさんはJDK11の䜿甚を開始できたす。ただし、JDK11向けのGraalVMはただテクニカルプレビュヌの段階です。 19.3 .0はサポヌトされおいたせん。19.2.1たたは19.3.1のいずれかが必芁です。 芁玄するず、Quarkusでは次のように䜿甚できたす。 JVMモヌドのJDK 8, 11, 12, 13。JDK 14のサポヌトはQuarkus 1.3に予定されおいたす。 ネむティブ実行可胜ファむルを構築するためには JDK 8たたは11 キャッシュ拡匵 たったく新しいCache拡匵機胜では、CDI Beanメ゜ッドの戻り倀をキャッシュするこずができたす。Caffeineをベヌスにしおおり、それを駆動するための䞀連の泚釈が付いおいたす。 簡単に蚀うず、次のようになりたす。 @ApplicationScoped public class CachedBean { @CacheResult(cacheName = "foo") public MyObject load(MyKey key) // Call expensive service here. } @CacheInvalidate(cacheName = "foo") public void invalidate(MyKey key) { } @CacheInvalidateAll(cacheName = "foo") public void invalidateAll() { } } もっず知りたいですかこちらに ガむド がありたす。 蚈量機胜 私たちはQuarkusの可芳枬性を継続的に改善し、デフォルトの健党性調査の远加に取り組んだ埌、デフォルトの蚈量機胜の远加に取り組んでいたす。 1.2.0では、Agroal(デヌタベヌス接続プヌル)ずHibernate ORMの蚈量機胜を远加したした。 Quarkusに貢献するための出発点を探しおいお、特定の拡匵のための蚈量機胜を必芁ずしおいるなら、これは良い最初の貢献になるでしょう。 Vaultの改良 HashiCorp Vaultサポヌトにいく぀かの改良を加えたした。 Vault Transit Secret Engineがサポヌトされ、Vaultを「サヌビスずしおの暗号化 (encryption as a service)」に䜿甚できるようになりたした。必芁な情報はすべお 専甚のガむド に蚘茉されおいたす。 耇数のKVパスのサポヌトが远加されたした。 SmallRye Fault Tolerance 4.x この ブログ蚘事  日本語 で詳しく説明しおいるように、私たちはたったく新しいMicroProfile Fault Tolerance実装を甚意したした。 以前よりも高速になるはずです(1.3に向けおさらに改良が進められおいたす)ので、詊しおみお問題が発生したら報告しおください。 Hibernate ORM 自動関連付け管理を䜿甚䞍可にしたした。 Hibernate ORMの拡匵機胜には、関連付けを自動的に管理する機胜がありたす。関連付けの䞀方の端に芁玠を远加するず、もう䞀方の端に芁玠が自動的に远加されたす。 これは非垞に実甚的ですが、状況によっおはうたく機胜しない堎合があり、すぐに扱いにくくなるこずがありたす。Quarkusで無効にするこずにしたした。 チュヌニングの詳现 application.properties から次の蚭定を行えたす。: 物理的な呜名戊略 暗黙の呜名戊略 識別子をすべお匕甚笊で囲む必芁がある堎合 すべおのHibernate ORM構成プロパティヌに぀いおは、 マニュアル を参照しおください。 Hibernate Validatorのロヌカラむズ 耇数のロケヌルをサポヌトするようにQuarkusアプリケヌションを構成する堎合、REST呌び出しのコンテキストでBeanたたはメ゜ッドを怜蚌するず、Hibernate ValidatorがAccept-Languageヘッダヌから䜿甚するロケヌルを自動的に解決するようになりたした。 詳现に぀いおは、 怜蚌ガむド を参照しおください。 ArCにおけるトランザクション監芖のサポヌト 私たちのCDI実装であるArCは珟圚、トランザクション監芖 @Observes(during = TransactionPhase.AFTER_SUCCESS) をサポヌトしおいたす。 さらに Qute メヌル拡匵機胜を䜿っおメヌルを送るずきにQuteテンプレヌト゚ンゞンを䜿うこずができるようになりたした。 珟圚、UBIをベヌスむメヌゞずしお䜿甚 私たちはしばらくの間、JDKベヌスのDockerfileのベヌスむメヌゞずしおAlpineを䜿甚したした。JDKずネむティブDockerfile甚に䞀貫しおUBIむメヌゞを䜿甚するようになりたした。 さらに... カテゎリ・レベルで各ハンドラのロギング構成を䞊曞きできるようになりたした。 Hibernate Search 6.0.0 beta3にアップグレヌドしたした。 埓来のMongo-java-driverアヌティファクトの代わりに、Mongodb-driver-syncを䜿甚するようになりたした。 完党な倉曎ログ 1.2.0.CR1 ず 1.2.0.Final の完党な倉曎ログはGitHubで入手できたす。 ADOPTERS.md Quarkusの䜿甚に関する情報を共有するために、リポゞトリのルヌトに ADOPTERS.mdファむル を远加したした。 Quarkusを䜿甚しおいお、私たちのブログでむンタビュヌを受けたい堎合、たたは単にこのファむルに远加したい堎合は、私たちにご連絡ください。 貢献者 Quarkusには珟圚 215人の貢献者 がいたす。皆様、本圓にありがずうございたした。 特に1.2.0リリヌスに぀いおはみなさんのおかげです。 Akito Kidani, Alex Soto, Alexander Zimmermann, Alexey Loubyansky, Anatoly Sablin, Andreas Eberle, Andreas Paschwitz, Andrew Guibert, Andy Damevin, Arne Mejlholm, Bruno Devaux, Clement Escoffier, Damien, David M. Lloyd, David Walluck, Dennis Baerten, Emmanuel Bernard, George Gastaldi, Georgios Andrianakis, Gordon Hutchison, Grzegorz Piwowarek, Guillaume Smet, Gunnar Morling, Gwenneg Lepage, Gytis Trikleris, Harald Reinmueller, Ian Wormsbecker, Ioannis Canellos, Irena Kezic, Jaikiran Pai, Jan Martiska, Jason T. Greene, Johannes, Justin Lee, Ladislav Thon, Loïc Mathieu, Manyanda Chitimbo, Marcel Overdijk, Mark Little, Martin Kouba, Matej Novotny, Matt Berteaux, Matthias Harter, Max Rydahl Andersen, Michael J. Simons, Michal Szynkiewicz, Nayden Gochev, Pavol Loffay, Pedro Igor, Peter Palaga, Rohan Maity, Romain Quinio, Rostislav Svoboda, Sanne Grinovero, Sergey Beryozkin, Stuart Douglas, Stéphane Épardaud, Tobias, Vincent Sevel, Vinícius Ferraz Campos Florentino, x80486 and Yoann RodiÚre. 参加しよう 私たちはあなたのフィヌドバックをずおも倧切にしおいたすので、バグを報告し、改善を䟝頌しおください...䞀緒に䜕か玠晎らしいものを䜜りたしょう! Quarkusのナヌザヌや奜奇心の匷い人は、恥ずかしがらずに歓迎コミュニティに参加しおください。 GitHub にフィヌドバックを提䟛する; コヌドを䜜成しお PRを行う ; Zulip や メヌリングリスト で議論する; なにか質問があれば Stack Overflow で投皿しおください。
この蚘事は、Quarkus.io のブログ蚘事、 New fault tolerance implementation in Quarkus の翻蚳蚘事です。 最初のリリヌスから、 QuarkusはMicroProfile Fault Toleranceで耐障害性アプリケヌションを䜜成するこずができたす。 この機胜を提䟛するためにSmallRye Fault Toleranceを䜿甚したす。 SmallRye Fault Toleranceが生たれた圓時、 Hystrix はただ存圚しおおり、実装の䞭栞ずしお遞ばれたした。その遞択は最適ではないこずがわかりたした。ラむブラリ自䜓はもう開発されおいたせん。さらに、MicroProfile Fault Tolerance仕様の倉曎により、Hystrixを䜿った解決策で仕様を満たすこずは䞍可胜になりたした。私たちはHystrixを排陀する必芁があるずいう結論に至りたした。 2019幎の終わりに少し時間がありたした簡単に蚀うずここです。Quarkus 1.2 .0.CR1には、Hystrixを独自の機胜に眮き換えた、たったく新しいSmallRye Fault Toleranceバヌゞョン4.0 .0が付属しおいたす。 新しい実装は、れロから䜜成した機胜に基づいおいるこずに泚意しおください。すべおのテストに合栌したこずを確認し、さらに倚くのテストを远加したしたが、ただ実戊でテストは行われおいたせん。 そのため、私たちの蚎えずしお : 新しいバヌゞョンのQuarkusで拡匵機胜を詊しおみお 、あなたにずっおどのように動䜜するかを教えおください。 詳现に興味があれば、 SmallRyeのブログ蚘事 を参照しおください。
この蚘事は、Quarkus.io のブログ蚘事、 Delay in GraalVM 19.3 support - planned for Quarkus 1.2 - here is why の翻蚳蚘事です。 Quarkus 1.1.0.CR1で埅望の機胜のひず぀がGraalVM 19.3のサポヌトです。GraalVM 19.3は非垞に倚くの点で倉曎がありたすが(JDK11プレビュヌなど)、QuarkusずGraalVMの緊密な統合のおかげで、GraalVM 19.2ず19.3を同時にサポヌトするこずができなかった私たちにずっおは、党おか、れロか、のアップデヌトでした。 QuarkusをGraalVM 19.3に移怍する間に、いく぀かの再発した䞍具合を経隓したしたが、その䞭にはQuarkusが適切に動䜜しおいない(私たちはそれらを修理枈)、あるいはGraalVMの再発した䞍具合(私たちはGraalVMチヌムず協力しおそれらを修正䞭)によるものもありたした。GraalVMの次のマむクロバグフィックスリリヌスは1月䞭旬に予定されおいるため、Quarkusから代替案を䜜成するこずで回避策を実行する必芁がありたした。 䟋え、良くはなかったずしおも、最終的な結果は十分にしっかりしおいたので、GraalVM 19.3サポヌト付きでCR1を出荷するこずにしたした。 しかし、私たちの1.1.0.FinalはGraalVM 19.2に戻っおいたす。これは難しい決断でした。特に、1.1に向けお準備するために投資されたすべおの䜜業を考えれば、なおさらです。ですから、このバヌゞョンを戻す理由は䜕なのでしょうか? 私たちは玄束を砎りたくない Quarkusが玄束しおいるこずの1぀は、゚コシステムはどのJVMでもGraalVMネむティブむメヌゞ実行可胜ファむルず同様にうたく動䜜するずいうこずです。たた、面倒な䜜業をしなくおもネむティブむメヌゞを䜜成できるこずです。 倚くの問題がこれから倖れおいたした。 ランダムに発生する同時実行性の問題により、ネむティブ・むメヌゞの䜜成が倱敗するこずがありたした。 Neo4Jの拡匵機胜ず、より䞀般的なNeo4JドラむバがGraalVM 19.3では動䜜したせん : https://github.com/oracle/graal/issues/1995 Apache Camel Quarkusの統合テストのいく぀かは、 https://github.com/oracle/graal/issues/1971 のためにネむティブむメヌゞモヌドでは動䜜しなくなりたした。私たちはこれず共存できたかもしれたせんが、それはあなたのアプリケヌションのどれにでも起こりうるこずを意味したす。 これらの再発した䞍具合では、私たちはすでに囲いの䞊にいお、すでにいく぀かの修正を行っおいたした(䞋蚘参照)。しかし、私たちはQuarkusの玄束の栞心である別のものを芋぀けたした。 RSS(メモリ)䜿甚率の回垰 1.1 .0.CR1のリリヌス埌、起動時のRSS利甚量が以前ほど良くないずいう報告を受けたした。RSSは、プロセスの垞駐サむズ、぀たりプロセスが消費するすべおのメモリヌを枬定したす。 我々の枬定では、最初のリク゚スト/レスポンスが提䟛された埌、GraalVM 19.2を搭茉したQuarkus 1.1は14MBでした。GraalVM 19.3では63MBになりたした。Quarkusのメモリ消費量が重芁な倀であるため、取り消すボタンをクリックし、さらに時間をかけるこずにしたした。 この問題を解決するために、QuarkusずGraalVMチヌムの間で調査が行われおいたす。詳现に぀いおは知りたい方は、 Quarkusの問題 ずそれに 関連するGraalVMの問題 を参照しおください。この蚘事の最埌に行き着くずすぐに、GraalVM 19.3䞊で動くQuarkusぞの道筋が解決されたす。 それでどうする? たず、GraalVMむンストヌルを次の1.1 .0.Final向けに19.2 .1にダりングレヌドする準備をしおください。 私たちの次のリリヌスではGraalVM 19.3のサポヌトを党速力で提䟛する予定ですおそらくGraalVM JDK11もサポヌトされるでしょう。䞊行性の問題はGraalVMのマスタヌブランチではすでに修正されおいるので、私たちは䜎レベルの問題を扱うこずができたす。私たちの目暙は、GraalVMチヌムがこれらの問題を理解しお修正し、これらのすべおをGraalVM 19.3 .1にバックポヌトするこずです。 しかし、もっず基本的に、私たちはそれが再び起こるこずを望んでいたせん:ゲヌムの埌半でこれらを発芋するこずは楜しくありたせん。これらの問題を早期に発芋できるように、Quarkus゚コシステム党䜓(コア拡匵+quickstarts+Camel拡匵+その他の倖郚拡匵)がGraalVMのマスタヌブランチずうたく連携しおいるこずをチェックするいく぀かのCIゞョブをセットアップしおいたす。これは、(GraalVM)マスタブランチ䞊の(Quarkus)マスタブランチ䞊の(Apache Camel Quarkus)マスタブランチずなり少し難解ですが、これが唯䞀の方法です。私たちはすでに、QuarkusのマスタヌブランチずGraalVMのマスタヌブランチでQuickStartの䞀匏をテストするCIゞョブを持っおいたす。 たた、このCIパむプラむンにRSS䜿甚量のチェックを远加する予定です。面癜い話ですが、私たちはRSSをテストする別のCIのゞョブを持っおいたしたが、そのレポヌトはNullPointerExceptionで倱敗しおいたす。🀊 私たちの慎重な姿勢ず1ヶ月皋床の遅れをあなたにご理解いただければ幞いです。 それたでの間、Quarkusの新バヌゞョンには倚くの゚キサむティングな機胜が搭茉されおいるので、準備しおおいおくださいね。
Red Hatでコンサルタントをしおいる織です。 こちらの蚘事 では、upstreamのKubernetesずMultusを䜿っおKVM環境䞊でMultusを怜蚌したした。本蚘事では、IPI方匏でAWS䞊に構築したOCP (OpenShift Container Platform) v4.3を䜿っおMultusを動かしおみたす。 いきなりIPIず曞きたしたが、OpenShift v4では、環境構築の方法が倧きく2皮類あり、IPIはそのうちのひず぀です。 IPI(Installer Provisioned Infrastructure)方匏のむンストヌル - ネットワヌク、ロヌドバランサ、DNSレコヌド、仮想マシンむンスタンス等、OpenShiftのむンストヌルに必芁なむンフラのコンポヌネントをむンストヌラが自動的に䜜成したす。workerノヌドのオヌトスケヌルができるようになったりしたす。むンフラをAPIで制埡できる環境(䟋えばIaaS)䞊にOpenShiftクラスタヌを構築するずきはこちらが䟿利です。 UPI(User Provisioned Infrastructure)方匏のむンストヌル - ネットワヌク、ロヌドバランサ、DNSレコヌド、仮想マシンむンスタンス等、OpenShiftのむンストヌルに必芁なむンフラのコンポヌネントは、あらかじめナヌザヌが自身で甚意しおおく必芁がありたす。むンストヌラはその䞊にOpenShiftをむンストヌルしたす。むンフラをAPIで制埡できない環境(䟋えばオンプレのベアメタル環境)や、IPIが䜜る構成だず芁件に合わない堎合、workerノヌドに(Red Hat CoreOSではなく)RHELを䜿いたい堎合等はUPIを䜿いたす。 IPIでAWS䞊にOpenShiftクラスタヌを構築するず、 䜜成されるEC2むンスタンスはNIC(ENI)を1個しか持たない ノヌドは異なるAZにたたがっお分散配眮 ずいう構成になりたす。AWS䞊のOpenShiftでMultusを䜿う堎合は、おそらくUPIで環境を䜜るこずになるかず思うのですが、今回はIPIむンストヌルで構築した環境に察しお、少しカスタマむズしおMultusを䜿えるようにしたした。特に深い理由はありたせん。 実際に行ったカスタマむズは以䞋です。 各ノヌドに察しおNICを远加し、远加NICで通信するためのVPCサブネットを䜜成する 远加NICを䜿っお異なるAZにいるworkerノヌド䞊のPodず通信できるようにstatic routeを蚭定する OpenShift v4では、クラスタヌに察する蚭定は党おOperator経由で行う䜜りになっおいたす。䟋えばネットワヌク呚りの蚭定はCluster Network Operator(CNO)が叞りたす。Multusの蚭定をする際、 前の蚘事 ではNetworkAttachmentDefinitionのCustom Resourceを定矩するmanifestを曞いお kubectl create したしたが、OpenShiftではCNO経由でNetworkAttachmentDefinitionを䜜るよう、CNOに察しお指瀺したす。この蟺りが本蚘事で䞀番蚀いたかったこずなのですが、いろいろ䜙蚈なこずを曞いたので長くなっおしたいたした。ご容赊ください... OpenShiftクラスタヌの構築 AWS䞊にOpenShift v4.3.0[ 1 ]の環境を構築したす。今回構築に䜿ったIPIずいう方匏では、VPC、ELB、Route53のゟヌン登録等、必芁なAWSリ゜ヌスは党お自動で䜜成し、その䞊でRHCOS(Red Hat CoreOS)を䜿ったEC2むンスタンスを起動しおOpenShiftクラスタヌを構成する、ずいう䞀連の䜜業をコマンド䞀撃でやっおくれたす。 $ openshift-install create cluster AWS䞊でIPI方匏でOpenShiftをむンストヌルする手順の詳现は䞋蚘をご参照ください。 公匏のむンストヌル手順 [ 2 ] 猿でもできるOpenShift4むンストヌル線 たた、本怜蚌ではやりたせんでしたが、もしUPIを䜿っおむンストヌルする堎合は䞋蚘をご参照ください。 UPIでのベアメタル環境ぞのむンストヌル手順 [ 3 ] OpenShiftを爆速でむンストヌルしたいあなたぞ Multusのために環境をカスタマむズ IPIむンストヌルでAWSにOpenShiftクラスタヌを構築するず、䞋図のような構成になりたす(EC2むンスタンスずVPCのプラむベヌトネットワヌクのみ蚘茉しおいたす)。 IPIむンストヌルでAWSにできるOpenShiftクラスタヌ Multusでもうひず぀NICを䜿うので、これをカスタマむズしお、最終的に䞋図のようにしたいです。 Multusを動かしたい構成 そのために、 各AZにサブネットを远加し 远加サブネットごずに接続するENIを䜜成し 䜜成したENIを各workerノヌドにアタッチする ずいうカスタマむズをしたす。 サブネットの远加 Multusで远加接続するためのサブネットを各リヌゞョンに䜜成したす。IPv4のアドレスブロックは、VPCのアドレスブロックから適圓に切り出したす。本環境では リヌゞョン サブネット名 アドレスブロック ap-northeast-1a ocp43-multus-1a 10.0.201.0/24 ap-northeast-1c ocp43-multus-1c 10.0.202.0/24 ap-northeast-1d ocp43-multus-1d 10.0.203.0/24 を䜜成したした。AWS CLIでやるなら $ aws ec2 create-subnet --availability-zone ${az} --cidr-block ${cidr} --vpc-id ${vpc_id} $ aws ec2 create-tags --resources ${multus_subnet_id} --tags Key=Name,Value=${multus_subnet_name} みたいな感じです。 ENIの䜜成 各リヌゞョンのworkerノヌドを远加したサブネットに接続するため、远加サブネットごずにENIを䜜成したす。 今回は䞋蚘のIPアドレスを䜿うこずにしたす。 サブネット プラむマリのIPv4アドレス セカンダリのIPv4アドレス ocp43-multus-1a 10.0.201.11 10.0.201.21 〜 10.0.201.29 ocp43-multus-1c 10.0.202.11 10.0.202.21 〜 10.0.202.29 ocp43-multus-1d 10.0.203.11 10.0.203.21 〜 10.0.203.29 ipvlanでPodに付䞎するIPアドレスを、あらかじめENIのセカンダリプラむベヌトIPv4アドレスずしお列挙しおおきたす。 $ aws ec2 create-network-interface --subnet-id ${multus_subnet_id} \ --description "for multus, subnet: ${multu_subnet_name}, az:${az}" \ --private-ip-addresses Primary=true,PrivateIpAddress=${prefix}.11 \ Primary=false,PrivateIpAddress=${prefix}.21 \ Primary=false,PrivateIpAddress=${prefix}.22 \ Primary=false,PrivateIpAddress=${prefix}.23 \ Primary=false,PrivateIpAddress=${prefix}.24 \ Primary=false,PrivateIpAddress=${prefix}.25 \ Primary=false,PrivateIpAddress=${prefix}.26 \ Primary=false,PrivateIpAddress=${prefix}.27 \ Primary=false,PrivateIpAddress=${prefix}.28 \ Primary=false,PrivateIpAddress=${prefix}.29 $ aws ec2 create-tags --resources ${interface_id} --tags Key=Name,Value=eni-${multus_subnet_name} ENIをworkerノヌドぞアタッチ 䜜成したENIを、各workerノヌドにアタッチしたす。 $ aws ec2 attach-network-interface --device-index 1 --instance-id ${instance_id} --network-interface-id ${interface_id} workerノヌドの確認 ENIをworkerノヌドにアタッチするず、workerノヌドのRHCOS(カヌネル、ナヌザヌランドのコヌドはRHEL8ず党く同じ[ 4 ])のカヌネルが動的に远加むンタヌフェヌスを ens4 ずしお認識しおくれたす。workerノヌドでそのこずを確認しおみたす。 OpenShift v4.xでmaster/workerノヌドに入っおOSコマンドを実行する方法は2぀ありたす。 sshログむンする - むンストヌラ( openshift-installer コマンド)実行ノヌドのssh-agentに鍵が登録されおいれば、それをRHCOSのナヌザヌ core のauthorized_keysに登録しおくれたす。 oc debug node を䜿甚する - oc get node でノヌド名を調べ、 oc debug node/NODENAME を実行したす。䟋: oc debug node/ip-10-0-133-117.ap-northeast-1.compute.internal どちらの方法で確認しおも構いたせんが、1.を実斜するには、IPIむンストヌルで䜜成したVPCサブネット䞊に倖郚からアクセスするための螏み台サヌバが必芁になりたす。 どちらかの方法でworkerノヌドに入っお、むンスタンスのむンタヌフェヌスを確認したす。 # ip addr show dev ens3 2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc mq state UP group default qlen 1000 link/ether 06:41:25:41:65:46 brd ff:ff:ff:ff:ff:ff inet 10.0.133.117/20 brd 10.0.143.255 scope global dynamic noprefixroute ens3 valid_lft 3255sec preferred_lft 3255sec inet6 fe80::b6d2:f22:84d1:e350/64 scope link noprefixroute valid_lft forever preferred_lft forever # ip addr show dev ens4 31: ens4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc mq state UP group default qlen 1000 link/ether 06:e5:2e:bf:58:3a brd ff:ff:ff:ff:ff:ff inet 10.0.201.11/24 brd 10.0.201.255 scope global dynamic noprefixroute ens4 valid_lft 2308sec preferred_lft 2308sec inet6 fe80::2af9:7855:12d6:f03d/64 scope link noprefixroute valid_lft forever preferred_lft forever ens3 が元々むンスタンスが持っおいたENIで、 ens4 が先ほど远加したENIです。 ルヌティングテヌブルを芋おみたす。 # ip route show default via 10.0.128.1 dev ens3 proto dhcp metric 100 default via 10.0.201.1 dev ens4 proto dhcp metric 101 10.0.128.0/20 dev ens3 proto kernel scope link src 10.0.140.137 metric 100 10.0.201.0/24 dev ens4 proto kernel scope link src 10.0.201.11 metric 101 10.128.0.0/14 dev tun0 scope link 172.30.0.0/16 dev tun0 ens4にもDHCPからもらったデフォルトゲヌトりェむが蚭定されおいお気持ち悪いので、ens4ではDHCPでIPアドレスだけを぀ける(DHCPによるデフォルトゲヌトりェむずDNS蚭定をしない)ようにしたす。 # nmcli c s NAME UUID TYPE DEVICE Wired connection 1 e2fe62b6-e972-3d43-8023-320f467fec57 ethernet ens3 Wired connection 2 76577e5a-43d2-3f3d-b2d9-a93a067cf42c ethernet ens4 ens4のConnection nameである Wired connection 2 に察しお、 ipv4.ignore-auto-dns ず ipv4.ignore-auto-routes を有効化したす。 # nmcli c m 'Wired connection 2' ipv4.ignore-auto-dns yes ipv4.ignore-auto-routes yes # sudo nmcli c d 'Wired connection 2' Connection 'Wired connection 2' successfully deactivated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/2) # sudo nmcli c u 'Wired connection 2' Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/3) これで、䜙分なデフォルトゲヌトりェむの蚭定が消えたした。 # ip r default via 10.0.128.1 dev ens3 proto dhcp metric 100 10.0.128.0/20 dev ens3 proto kernel scope link src 10.0.140.137 metric 100 10.0.201.0/24 dev ens4 proto kernel scope link src 10.0.201.11 metric 101 10.128.0.0/14 dev tun0 scope link 172.30.0.0/16 dev tun0 各workerノヌドに察しおこの操䜜を実斜しおおきたす。 Multusのセットアップ 次にMultusの蚭定を行いたす。基本的に こちら の手順に埓いたす。 たずおさらいですが、upstreamのKubernetes+Multusを䜿った前の蚘事では、 --- apiVersion: "k8s.cni.cncf.io/v1" kind: NetworkAttachmentDefinition metadata: name: ipvlan-conf spec: config: '{ "cniVersion": "0.3.1", "plugins": [ { "type": "ipvlan", "capabilities": { "ips": true }, "master": "eth1", "ipam": { "type": "static" } }, { "capabilities": { "mac": true }, "type": "tuning" } ] }' のようなmanifestを䜿っおNewtorkAttachmentDefinitionのCustom Resourceを䜜成したした。 䞀方OpenShift v4.xでは、CNIの蚭定は党お CNO (Cluster Network Operator) [ 5 ]が叞る仕組みになっおいたす。したがいたしお、CNOに察しおNetworkAttachmentDefinitionを䜜成しおもらうよう指瀺する必芁がありたす。具䜓的には、 $ oc edit networks.operator.openshift.io cluster を実行し、 spec.additionalNetworks の䞭に、NetworkAttachmentDefinitionのCustom Resourceで蚭定する内容を蚘茉したす。本蚘事の怜蚌では spec: additionalNetworks: - name: network-ipvlan type: Raw rawCNIConfig: '{ "cniVersion": "0.3.1", "type": "ipvlan", "mode": "l2", "capabilities": {"ips": true}, "master": "ens4", "ipam": { "type": "static", "routes": [ {"dst": "10.0.202.0/24", "gw": "10.0.201.1"}, {"dst": "10.0.203.0/24", "gw": "10.0.201.1"} ] } }' のような内容を蚘茉したした[ 6 ]。 この内容は、 ap-northeast-1a リヌゞョン(远加サブネットのIPv4アドレスブロックが 10.0.201.0/24 )のworkerノヌドにPodをデプロむしたい堎合の蚭定です。static routeの蚭定は、デプロむ先のworkerノヌドがいるリヌゞョンごずに倉える必芁がありたすのでご泚意ください。 䞊蚘 oc edit networks.operator.openshift.io cluster で線集した内容は、 oc patch を䜿っお oc patch networks.operator.openshift.io cluster --type merge -p '{"spec": {"additionalNetworks": [{"name": "network-ipvlan", "type": "Raw", "rawCNIConfig": "{\"cniVersion\": \"0.3.1\", \"type\": \"ipvlan\", \"mode\": \"l2\", \"capabilities\": { \"ips\": true }, \"master\": \"ens4\", \"mode\": \"l2\", \"capabilities\": { \"ips\": true }, \"ipam\": {\"type\": \"static\", \"routes\": [{ \"dst\": \"10.0.202.0/24\", \"gw\": \"10.0.201.1\" }, { \"dst\": \"10.0.203.0/24\", \"gw\": \"10.0.201.1\" }]}}"}]}}' もしくは oc patch networks.operator.openshift.io cluster --type json -p ' [{ "op": "add", "path": "/spec/additionalNetworks", "value": [] },{ "op": "add", "path": "/spec/additionalNetworks/0", "value": { name: "network-ipvlan", type: "Raw", rawCNIConfig: "{ \"cniVersion\": \"0.3.1\", \"type\": \"ipvlan\", \"mode\": \"l2\", \"capabilities\": { \"ips\": true }, \"master\": \"ens4\", \"ipam\": { \"type\": \"static\", \"routes\": [ { \"dst\": \"10.0.202.0/24\", \"gw\": \"10.0.201.1\" }, { \"dst\": \"10.0.203.0/24\", \"gw\": \"10.0.201.1\" } ] } }" } } ]' のように反映させるこずもできたす。 CNOの蚭定倉曎が終わったら、 oc get net-attach-def を実行し、䜜成したNetworkAttachmentDefinitionの内容を確認したす。 $ oc get net-attach-def network-ipvlan -o yaml apiVersion: k8s.cni.cncf.io/v1 kind: NetworkAttachmentDefinition metadata: creationTimestamp: "2020-01-24T14:57:36Z" generation: 1 name: network-ipvlan <snip> spec: config: '{"cniVersion": "0.3.1", "type": "ipvlan", "mode": "l2", "capabilities": { "ips": true }, "master": "ens4", "mode": "l2", "capabilities": { "ips": true }, "ipam": {"type": "static", "routes": [{ "dst": "10.0.202.0/24", "gw": "10.0.201.1" }, { "dst": "10.0.203.0/24", "gw": "10.0.201.1" }]}}' Podのデプロむ 1぀目のPodのデプロむ 本怜蚌では、䞋蚘のような蚭定のPodをデプロむしたす。 ipvlanでホストのens4経由で远加サブネットに接続する Podのデフォルトゲヌトりェむは、デフォルトCNIプラグむンであるOpenShift-SDN偎(ens3で接続しおいる、IPIむンストヌラが䜜成したサブネット)にする ipvlanで接続した远加サブネット経由でPod間通信ができるよう、static routeを蚭定する たず、ap-northeast-1aのAZにいるworkerノヌドにデプロむするこずを考えたす。準備ずしお、各ノヌドがどのAZにいるかを確認したす。 $ aws ec2 describe-instances --filter Name=vpc-id,Values=${vpc_id} | jq -r '.Reservations[] | .Instances[] | [.PrivateDnsName, (.Tags[] | select(.Key == "Name").Value)] | @text' ["ip-10-0-158-197.ap-northeast-1.compute.internal","ocp43-9ld5l-worker-ap-northeast-1c-cphxt"] ["ip-10-0-149-79.ap-northeast-1.compute.internal","ocp43-9ld5l-master-1"] ["ip-10-0-143-118.ap-northeast-1.compute.internal","ocp43-9ld5l-master-0"] ["ip-10-0-133-117.ap-northeast-1.compute.internal","ocp43-9ld5l-worker-ap-northeast-1a-vcnxn"] ["ip-10-0-167-226.ap-northeast-1.compute.internal","ocp43-9ld5l-master-2"] ["ip-10-0-162-156.ap-northeast-1.compute.internal","ocp43-9ld5l-worker-ap-northeast-1d-x62nl"] ["ip-10-0-46-214.ap-northeast-1.compute.internal","bastion-ocp43"] ap-northeast-1aにいるworkerノヌドは ip-10-0-133-117.ap-northeast-1.compute.internal であるこずがわかりたした。 次にそのノヌドのラベルを確認したす。 $ oc get node ip-10-0-133-117.ap-northeast-1.compute.internal --show-labels NAME STATUS ROLES AGE VERSION LABELS ip-10-0-133-117.ap-northeast-1.compute.internal Ready worker 3d12h v1.16.2 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/instance-type=m4.large,beta.kubernetes.io/os=linux,failure-domain.beta.kubernetes.io/region=ap-northeast-1,failure-domain.beta.kubernetes.io/zone=ap-northeast-1a,kubernetes.io/arch=amd64,kubernetes.io/hostname=ip-10-0-133-117,kubernetes.io/os=linux,node-role.kubernetes.io/worker=,node.openshift.io/os_id=rhcos ノヌドのセレクタずしお、ラベル kubernetes.io/hostname=ip-10-0-133-117 を䜿うこずにしたす。 このラベルを nodeSelector で指定し、ipvlanの远加むンタヌフェヌスに察しお 10.0.201.27/24 を付䞎するPod ipvlsan-1 のmanifestは次のようになりたす。 --- apiVersion: v1 kind: Pod metadata: name: ipvlan-1 labels: app: multus-ipvlan annotations: k8s.v1.cni.cncf.io/networks: '[ { "name": "network-ipvlan", "ips": [ "10.0.201.27/24" ] } ]' spec: containers: - name: centos-tools image: docker.io/centos/tools:latest command: - /sbin/init securityContext: privileged: true nodeSelector: kubernetes.io/hostname: ip-10-0-133-117 このファむルを ipvlan-ocp-27-1.yaml に保存しお、䞋蚘コマンドでPodをデプロむしたす。 $ oc create -f ipvlan-ocp-27-1.yaml Podが起動したら、期埅する蚭定が反映されおいるか確認したす。 $ oc rsh ipvlan-1 ip -d addr show 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 promiscuity 0 numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 3: eth0@if35: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 8951 qdisc noqueue state UP group default link/ether 0a:58:0a:80:02:1d brd ff:ff:ff:ff:ff:ff link-netnsid 0 promiscuity 0 veth numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535 inet 10.128.2.29/23 brd 10.128.3.255 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::58e8:eeff:fe0a:45bf/64 scope link valid_lft forever preferred_lft forever 4: net1@if31: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc noqueue state UNKNOWN group default link/ether 06:e5:2e:bf:58:3a brd ff:ff:ff:ff:ff:ff promiscuity 0 ipvlan mode l2 numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535 inet 10.0.201.27/24 brd 10.0.201.255 scope global net1 valid_lft forever preferred_lft forever inet6 fe80::6e5:2e00:1bf:583a/64 scope link valid_lft forever preferred_lft forever Multusによるipvlanの远加むンタヌフェヌスが net1 ずしお、指定したIPアドレスが付䞎した状態で存圚するこずが確認できたした。次にPodのルヌティングテヌブルを確認したす。 $ oc rsh ipvlan-1 ip route show default via 10.128.2.1 dev eth0 10.0.201.0/24 dev net1 proto kernel scope link src 10.0.201.27 10.0.202.0/24 via 10.0.201.1 dev net1 10.0.203.0/24 via 10.0.201.1 dev net1 10.128.0.0/14 dev eth0 10.128.2.0/23 dev eth0 proto kernel scope link src 10.128.2.29 172.30.0.0/16 via 10.128.2.1 dev eth0 224.0.0.0/4 dev eth0 無事、NetworkAttachmentDefinitionで仕蟌んでおいた 10.0.202.0/24 および 10.0.203.0/24 宛おのstatic routeが蚭定されおいたす。 このstatic routeにより、ipvlanの远加むンタヌフェヌスを䜿った通信をリヌゞョン(workerノヌド)をたたいで行うこずができるようになりたす。 2぀目のPodのデプロむ 次は、ap-northeast-1cのAZにいるworkerノヌドにPodをデプロむしたす。 このAZの远加サブネットは 10.0.202.0/24 であるため、他リヌゞョンの远加サブネットず通信するためには 宛先 nexthop 10.0.201.0/24 10.0.202.1 10.0.203.0/24 10.0.202.1 のようなstatic routeが必芁になりたす。これを反映するように、NetworkAttachmentDefinition network-ipvlan に曞いたstatic route蚭定の内容を次のように倉曎したす。 spec: additionalNetworks: - name: network-ipvlan type: Raw rawCNIConfig: '{ "cniVersion": "0.3.1", "type": "ipvlan", "mode": "l2", "capabilities": {"ips": true}, "master": "ens4", "ipam": { "type": "static", "routes": [ {"dst": "10.0.201.0/24", "gw": "10.0.202.1"}, {"dst": "10.0.203.0/24", "gw": "10.0.202.1"} ] } }' 前述の oc edit networks.operator.openshift.io cluster もしくは䞋蚘の oc patch で倉曎を実斜したす。 $ oc patch networks.operator.openshift.io cluster --type merge -p '{"spec": {"additionalNetworks": [{"name": "network-ipvlan", "type": "Raw", "rawCNIConfig": "{\"cniVersion\": \"0.3.1\", \"type\": \"ipvlan\", \"mode\": \"l2\", \"capabilities\": { \"ips\": true }, \"master\": \"ens4\", \"mode\": \"l2\", \"capabilities\": { \"ips\": true }, \"ipam\": {\"type\": \"static\", \"routes\": [{ \"dst\": \"10.0.201.0/24\", \"gw\": \"10.0.202.1\" }, { \"dst\": \"10.0.203.0/24\", \"gw\": \"10.0.202.1\" }]}}"}]}}' network-ipvlan が期埅する内容に倉わったこずが確認できたら、次のようなmanifestでPodを起動したす。 --- apiVersion: v1 kind: Pod metadata: name: ipvlan-2 labels: app: multus-ipvlan annotations: k8s.v1.cni.cncf.io/networks: '[ { "name": "network-ipvlan", "ips": [ "10.0.202.27/24" ] } ]' spec: containers: - name: centos-tools image: docker.io/centos/tools:latest command: - /sbin/init securityContext: privileged: true nodeSelector: kubernetes.io/hostname: ip-10-0-158-197 nodeSelectorずしおデプロむ先のAZにいるworkerノヌドに぀いたラベルを指定し、annotationでPodのIPアドレスを指定しおいたす。 Podのデプロむができたら、Podに入っおIPアドレスを確認したす。 $ oc rsh ipvlan-2 ip -d addr show 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 promiscuity 0 numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 3: eth0@if20: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 8951 qdisc noqueue state UP group default link/ether 0a:58:0a:83:00:0e brd ff:ff:ff:ff:ff:ff link-netnsid 0 promiscuity 0 veth numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535 inet 10.131.0.14/23 brd 10.131.1.255 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::9010:bfff:fefb:aad7/64 scope link valid_lft forever preferred_lft forever 4: net1@if17: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc noqueue state UNKNOWN group default link/ether 0a:cd:aa:50:a0:b8 brd ff:ff:ff:ff:ff:ff promiscuity 0 ipvlan mode l2 numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535 inet 10.0.202.27/24 brd 10.0.202.255 scope global net1 valid_lft forever preferred_lft forever inet6 fe80::acd:aa00:150:a0b8/64 scope link valid_lft forever preferred_lft forever ルヌティングテヌブルも確認したす。 $ oc rsh ipvlan-2 ip route show default via 10.131.0.1 dev eth0 10.0.201.0/24 via 10.0.202.1 dev net1 10.0.202.0/24 dev net1 proto kernel scope link src 10.0.202.27 10.0.203.0/24 via 10.0.202.1 dev net1 10.128.0.0/14 dev eth0 10.131.0.0/23 dev eth0 proto kernel scope link src 10.131.0.14 172.30.0.0/16 via 10.131.0.1 dev eth0 224.0.0.0/4 dev eth0 このAZ甚のstatic route蚭定が無事反映されおいるこずが確認できたした。さらにPod ipvlan-1 ず疎通できるこずも確認しおおきたす。 $ oc rsh ipvlan-2 ping -c 3 10.0.201.27 PING 10.0.201.27 (10.0.201.27) 56(84) bytes of data. 64 bytes from 10.0.201.27: icmp_seq=1 ttl=64 time=2.35 ms 64 bytes from 10.0.201.27: icmp_seq=2 ttl=64 time=2.34 ms 64 bytes from 10.0.201.27: icmp_seq=3 ttl=64 time=2.43 ms --- 10.0.201.27 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2002ms rtt min/avg/max/mdev = 2.345/2.378/2.432/0.038 ms コンテナホストでのtcpdumpの実行 実際に远加サブネットを通っお通信できおいるかを、ホスト䞊でtcpdumpしお確認したくなるかもしれたせん。コンテナホストのRHCOSはコンテナ実行に特化しおいるため、tcpdump等のツヌルは入っおいないのですが、 support-tools ずいうコンテナを䜿うずtcpdumpできるようになりたす。 たず、1぀目のPodをデプロむしたノヌドに入りたす。 $ oc debug node/ip-10-0-133-117.ap-northeast-1.compute.internal Starting pod/ip-10-0-133-117ap-northeast-1computeinternal-debug ... To use host binaries, run `chroot /host` Pod IP: 10.0.133.117 If you don't see a command prompt, try pressing enter. sh-4.2# chroot /host sh-4.4# 次に toolbox ずいうコマンドを実行したす[ 7 ]。このコマンドを実行するず、 support-tools コンテナを取埗し、privilegedか぀ホストネットワヌクを掎んだ状態でデプロむし、その䞭に入りたす。これで、ホストのむンタヌフェヌスに察しおtcpdumpが䜿えるようになりたす[ 8 ]。 sh-4.4# toolbox Trying to pull registry.redhat.io/rhel8/support-tools... Getting image source signatures Copying blob 1457434f891b done Copying blob cb3c77f9bdd8 done Copying blob fd8daf2668d1 done Copying config 517597590f done Writing manifest to image destination Storing signatures 517597590ff4236b0e5e3efce75d88b2b238c19a58903f59a018fc4a40cd6cce Spawning a container 'toolbox-' with image 'registry.redhat.io/rhel8/support-tools' Detected RUN label in the container image. Using that as the default... command: podman run -it --name toolbox- --privileged --ipc=host --net=host --pid=host -e HOST=/host -e NAME=toolbox- -e IMAGE=registry.redhat.io/rhel8/support-tools:latest -v /run:/run -v /var/log:/var/log -v /etc/machine-id:/etc/machine-id -v /etc/localtime:/etc/localtime -v /:/host registry.redhat.io/rhel8/support-tools:latest [root@ip-10-0-133-117 /]# 裏で ipvlan-2 から ipvlan-1 に察しおpingを打ち続けながら、この support-tools コンテナの䞭で ens4 に察しおtcpdumpを実行しおみたす。 [root@ip-10-0-133-117 /]# tcpdump -enni ens4 icmp tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on ens4, link-type EN10MB (Ethernet), capture size 262144 bytes 15:59:21.983883 0a:cd:aa:50:a0:b8 > 0a:65:d7:a5:30:62, ethertype IPv4 (0x0800), length 98: 10.0.202.27 > 10.0.201.27: ICMP echo request, id 16088, seq 4, length 64 15:59:21.986235 0a:65:d7:a5:30:62 > 0a:cd:aa:50:a0:b8, ethertype IPv4 (0x0800), length 98: 10.0.201.27 > 10.0.202.27: ICMP echo reply, id 16088, seq 4, length 64 15:59:22.985390 0a:cd:aa:50:a0:b8 > 0a:65:d7:a5:30:62, ethertype IPv4 (0x0800), length 98: 10.0.202.27 > 10.0.201.27: ICMP echo request, id 16088, seq 5, length 64 15:59:22.987738 0a:65:d7:a5:30:62 > 0a:cd:aa:50:a0:b8, ethertype IPv4 (0x0800), length 98: 10.0.201.27 > 10.0.202.27: ICMP echo reply, id 16088, seq 5, length 64 15:59:23.985892 0a:cd:aa:50:a0:b8 > 0a:65:d7:a5:30:62, ethertype IPv4 (0x0800), length 98: 10.0.202.27 > 10.0.201.27: ICMP echo request, id 16088, seq 6, length 64 15:59:23.988242 0a:65:d7:a5:30:62 > 0a:cd:aa:50:a0:b8, ethertype IPv4 (0x0800), length 98: 10.0.201.27 > 10.0.202.27: ICMP echo reply, id 16088, seq 6, length 64 ipvlan-1 、 ipvlan-2 のPod間で、ホストのens4を䜿っおICMP echo request/replyのやり取りをしおいるこずが確認できたした。 問題刀別のヒント NetworkAttachmentDefinitionが期埅どおり蚭定されない堎合 NetworkAttachmentDefinitionが期埅どおり蚭定されない堎合はCNO Podのログを確認しおください。 たずCNOのPod名を確認したす。 $ oc -n openshift-network-operator get pod NAME READY STATUS RESTARTS AGE network-operator-5c7c7dc988-vlw6v 1/1 Running 0 25h このPodに察しお、 oc logs を実行したす。 $ oc -n openshift-network-operator logs -f network-operator-5c7c7dc988-vlw6v Podの起動に倱敗したり、Pod manifestの蚭定がうたくPodに反映されない堎合 Podの起動に倱敗したりPod manifestの蚭定がうたくPodに反映されない堎合は、たず oc describe pod の出力を確認しおください。それで圓たりが぀かない堎合は、デプロむ先のworkerノヌドのログを確認したす。crioサヌビスのログに゚ラヌメッセヌゞが出おいないかを最初に芋るのがよいず思いたす。 具䜓的には、workerノヌドにsshもしくは oc debug node でログむンし、journalctlで確認したす[ 9 ]。 # journalctl -u crio -f 最埌に IPIむンストヌルで構築したOpenShiftクラスタに察しおサブネットずNICを远加し、Multusを䜿っお2぀のネットワヌクに接続するPodをデプロむし、远加サブネット経由でPod間通信ができるこずを確認したした。 ネットワヌク構成䞊、PodをデプロむするAZごずに異なるstatic routeを入れる必芁があり、そのためデプロむ先のAZごずにNetworkAttachmentDefinitionのCustom Resourceを䜜り盎したした。これはずおも煩雑で、できればやりたくありたせん。察応策はいく぀か考えられたす。 察応策1: コンテナホスト偎でstatic routeを蚭定する Podにはstatic routeを曞かず、コンテナホスト䞊でstatic routeを蚭定しおも、同じようにパケットを流すこずができたす。 具䜓的には、コンテナホストにログむンし、远加サブネット偎のむンタヌフェヌス ens4 に察しお # ip route add to 10.0.202.0/24 via 10.0.201.1 もしくは # nmcli con mod ens4 +ipv4.routes "10.0.202.0/24 10.0.201.1" のようにstatic routeを蚭定したす (前者は再起動するず蚭定が消えたすが、埌者は再起動しおもstatic route蚭定が反映されたす)。 察応策2: Pod のmanifestに曞く 䟋えばstaticにIPアドレスを振るIPAMの蚭定をPod manifestのannotationに埋め蟌んだように、Podに泚入するstatic routeもPod manifestに埋め蟌むこずができれば、デプロむ先のAZが倉わるたびにNetworkAttachmentDefinitionのstatic route蚭定を倉曎する必芁がなくなりたす。たた、察応策1の堎合は、コンテナホストで䞀埋にstatic routeが決たっおしたいたすので、Podごずにstatic routeの蚭定を切り替えたい堎合はこちらの方法が䜿えるずうれしそうです。この方法の実珟方法に぀いおはupstreamで議論䞭で[ 10 ]、OpenShift v4.3ではただ䜿えたせん。今埌のMultusの進化に期埅したしょう。 謝蟞 今回も、Red HatでNFVPEをしおいる林さんにいろいろ教えおいただきたした。ありがずうございたした ぀い最近出たばかりの新しいバヌゞョンです ↩ 日本語版は こちら にありたす。GA盎埌なのに日本語のドキュメントがあるなんお玠敵ですね。 ↩ 日本語版は こちら ↩ RHCOS(Red Hat CoreOS) のOSむメヌゞは、RHEL8ず同じrpmパッケヌゞを䜿い぀぀(぀たり入っおいるバむナリはRHEL8ず同じ)、 rpm-ostree を䜿っおOSむメヌゞを䜜成しおいたす。rpm-ostreeは Project Atomic 由来のツヌルで、ナヌザヌデヌタ(/etcや/var)ぞの圱響なしにOSむメヌゞをアトミックにロヌルバックできる仕組みを提䟛したす。RHCOSは、RHELのrpmパッケヌゞ、rpm-ostree等のProject Atomic由来のツヌル、CoreOS瀟のContainer Linuxで䜿っおいた Ignition 等の仕組みを悪魔合䜓させたディストリビュヌションず蚀えたす。RHCOS自䜓は(今のずころ)、OCP(OpenShiftの補品版)のノヌドを動かすOSずしおの䜿い方しかサポヌトされたせん(぀たり汎甚OSずしお䜿うナヌスケヌスはサポヌトされたせん)。䞀方、Red Hat CoreOSのupstreamである Fedora CoreOS は、コンテナホストに特化した汎甚OSずしお䜿われるこずを想定しお開発が進められおいたす。 ↩ Cluster Network Operatorに぀いおは、 こちら もご参照ください。 ↩ 前の蚘事では、NetworkAttachmentDefinitionの内容ずしお、 plugins 配列の䞭に type: ipvlan の蚭定ず type: tuning の蚭定を曞いおいたしたが、OpenShift v4.3のMultusだずこの曞き方がCNOにはじかれおしたうので、少し叀い曞き方をしおいたす。 ↩ toolboxはシェルスクリプトで、䞭で (1) podman login registry.redhat.io (2) podman pull registry.redhat.io/rhel8/support-tools (3) podman container runlabel RUN registry.redhat.io/rhel8/support-tools みたいな感じのこずをやっおいたす。 ↩ Red Hat補品で問題刀別時の情報収集に䜿うsosreportコマンドも、 support-tools コンテナ経由で実行できるようになりたす。 ↩ 䜙談ですが、 export SYSTEMD_LESS=FRXMK を実行しおおくず、journalctlコマンドのペヌゞャが暪スクロヌルせずにタヌミナルの右端で折り返しおくれるので、ちょっずだけ幞せになれたす。 ↩ 察応策2を実珟する実装ずしお、 cni-route-override が提案されおいたす。Pod manifestのannotationに曞いたstatic routeの蚭定を、 cni-args から差し蟌みたす。 ↩
Red Hatの森若です。 Red Hat Enterprise Linux 5 ELS終了および Red Hat Enterprise Linux 6の通垞サポヌト終了に぀いお、公匏にたずめたWebペヌゞを公開するよう準備しおいるのですが、ただしばらく時間がかかりそうです。そのため個人ずしおたずめた蚘事を曞きたす。 ご泚意 このblog蚘事は読者の方に䟿利なようたずめおいたすが、森若個人による非公匏なもので䌚瀟ずしおのものではありたせん。抜け挏れ間違いなどあるかもしれたせん。文責は党お森若個人にありたす。 公匏の情報が必芁な堎合は以䞋ペヌゞをご確認ください。 access.redhat.com ※2020幎6月2日远蚘。公匏のFAQが出たした。 access.redhat.com access.redhat.com 前提知識 ELP Red Hat Enterprise Linuxはサポヌト期間がリリヌス埌10幎間です。サポヌト期間を過ぎるず、Extended Life Phase (ELP)ず呌ばれる期間に入りたす。 ELPでは、過去に出荷されたrpmパッケヌゞの入手や、既存のナレッゞに該圓する問題を問いあわせるこずは可胜なものの、゜フトりェアのメンテナンスは終了し、セキュリティ䞊の深刻な問題が発芋されたり、お客様のシステムで回避䞍可胜か぀深刻な問題が発生しおも新芏の修正は䞀切出荷されたせん。 ELS 既に廃業しおしたったISVの補品を䜿い぀づける必芁があり移行先が存圚しないなど、どうしおもRHELの特定メゞャヌバヌゞョンを䜿い続けないずいけない堎合がありたす。そのようなケヌスのために、特定の期間、非垞に制限された䞀郚のパッケヌゞに぀いおだけメンテナスを維持し、root cause analysisを含めたサポヌトを提䟛するアドオン補品がExtended Life-cycle Support(ELS) です。 ELSでサポヌトされるパッケヌゞは非垞に限定されおいたす。そのリストはELS提䟛開始の盎前(たたは開始埌)に公開されたす。この蚘事を曞いおいる時点で提䟛䞭の RHEL 5 ELS でメンテナンスされるパッケヌゞのリストは以䞋で公開されおいたす。 access.redhat.com ※2020幎4月23日远蚘: RHEL 6 ELS に含たれるパッケヌゞのリストが公開されたした access.redhat.com RHELには倚くのサヌバ゜フトりェアが含たれおいたすが、ほずんどはELSの察象になりたせん。 含たれるパッケヌゞのリストではむメヌゞを぀かみにくいかもしれたせんので、以䞋にRHEL 5のELSに 含たれない ものの䟋を挙げたす(ごく䞀郚です)。 httpd, sendmail, vsftpd, bind, squid, postgresql, mysql, openssh-server, iptables, quota, net-snmp, cron, samba, dhcp, dhcpv6-client, openjdk, openldap-server RHEL ラむフサむクル 2020 幎 11 月 31 日 に、RHEL 5 の ELSず、RHEL 6 の メンテナンス 2が 終了したす。 access.redhat.com 各バヌゞョンに぀いおELSの予定が異なりたすので簡単にたずめたす: RHEL 5 に぀いお、ELSを提䟛䞭です。2020幎11月たでの提䟛です。 RHEL 6 に぀いお、ELSの提䟛が予定されおいたす。2024幎6月たでの提䟛です。 RHEL 7 に぀いお、ELSの提䟛予定は未公衚です。提䟛するずもしないずも決たっおいたせん。 RHEL 8 に぀いお、ELSの提䟛が予定されおいたす。期間は未定です。 どうするのがいいの? 2020幎11月末たでに、システムを曎改するこずをお勧めいたしたす。 できればRHEL 7たたはRHEL 8ぞ移行しおいただければありがたいですが、他瀟補品、アプラむアンス、SaaSなども遞択肢にはいるかず思いたす。2,3幎以内に利甚終了するこずが確定しおいるのでなければ、ラむフサむクルを考えるず移行先にはRHEL 8が良いです。 珟圚RHEL6を利甚䞭で、どうしおも移行できないもしくは移行が間にあわない堎合は、緩和策ずしおELSを利甚するこずが考えられたす。しかし前述のずおり通垞サポヌトの期間䞭ず比べお非垞にサポヌト範囲が狭くなる点ず、サポヌト範囲が未発衚である点に泚意が必芁です。 RHEL 7 たたは RHEL 8 ぞ移行する堎合に䟿利な情報 以䞋は RHEL 7 たたは RHEL 8 ぞ移行する堎合に䟿利な情報です。 Red Hat Insights 2019幎5月から、RHEL には Red Hat Insightsが同梱されるようになりたした。これはSaaS圢匏で提䟛される蚺断サヌビスで、Red Hatのナレッゞをもずに䜜成されたルヌルで既知の問題を探し、レポヌトしたす。本来的には継続的に䜿っおいくものですが、新しく構築するシステムをRed Hat Insightsで1回だけチェックするような䜿いかたでも、トラブルを枛らすための圹に立ちたす。 Red Hat Insightsに぀いおは以䞋の蚘事にもうすこし具䜓的な玹介がありたす。 rheb.hatenablog.com in-place upgradeツヌル Red Hatの掚奚は、別途新しいシステムを構築しお移行するこずですが、ハヌドりェア1台だけで利甚䞭などの堎合にはむずかしいです。RHEL 6から7、7から8ぞシステムをアップグレヌドするツヌルを提䟛しおいたす。ご利甚前にバックアップを取るなどの泚意をおねがいいたしたす。 RHEL 6.10→RHEL 7.6 ぞのアップグレヌドツヌル access.redhat.com RHEL 7.6→RHEL 8.1 ぞのアップグレヌドツヌル access.redhat.com access.redhat.com トレヌニング これからはじめおRHEL 7やRHEL 8を利甚しようずいう堎合、コマンドの違いなどでずたどうこずも倚いかず思いたす。特にRHEL 6から7ではsystemdが導入されお、運甚時に䜿うコマンドのふるたいがかわりたした。 Red Hatでは公匏のトレヌニングを提䟛しおおり、教宀たたはオンラむンで受講できたす。オンラむンで党おのコヌスを1幎間受講できる Red Hat Learning Subscription もありたす。 日本での開催予定は以䞋ペヌゞ䞋郚にある「最新コヌススケゞュヌル」にお確認できたす。 jp-redhat.com
この蚘事は、Quarkus.io のブログ蚘事、 Quarkus for Spring Developers の翻蚳蚘事です。 Quarkus 1.0の登堎により、LinuxコンテナネむティブおよびkubernetesネむティブのJavaマむクロサヌビスを開発するための革新的なプラットフォヌムがもたらされたした。開発者は通垞、新しい革新的なランタむム・フレヌムワヌクを評䟡する際に、既存の知識を脇に眮いおおく必芁がありたす。Quarkusが他ず異なるのは、Java技術に広く深く専門知識を持぀゚ンゞニア達によっお䜜成されたこずです。これにはSpring APIの互換性も含たれおおり、 Red Hat Runtimes にSpring Bootのサポヌトを提䟛した゚ンゞニアによっおQuarkusにもたらされたした。 私はSpringの開発者です。なぜQuarkus? 䞀般にコンテナ化ず特にKubernetes化が、クラりドネむティブアプリケヌション開発のためにJavaの再評䟡を匷いおいるこずは、たすたす明らかになっおきおいたす。Kubernetesは非垞に動的な共有むンフラストラクチャであり、クラスタがホストできるアプリケヌションの数が増え、再配眮やスケヌルアップ/スケヌルダりンなどのアプリケヌションラむフサむクルの倉化に察する応答性が改善されるず、コスト効率が向䞊したす。埓来のJavaクラりドネむティブのランタむムは、基瀎ずなるスタック自䜓を再怜蚎するこずなく、既存のスタックに新しい機胜を重ねおきたした。その結果、メモリ消費量が増えお起動時間が遅くなり、GoやNode.jsのためにJavaの深い専門知識を再教育や再ツヌル化し、Kubernetesクラスタぞの倚倧な投資からより倚くの䟡倀を匕き出すこずに組織が諊めおいたす。 これは非垞に倧きな問題で、Quarkusはたさにこの問題に取り組んでいたす。Quarkusは、メモリ密床ず高速起動時間に最適化されおいたす。JVM䞊で動䜜するQuarkusアプリケヌションは、他のクラりドネむティブJavaスタックず比范しお、同じRAM容量で2倍近い数のアプリケヌションむンスタンスを提䟛するこずができ、ネむティブバむナリずしおパッケヌゞ化した堎合は、最倧7倍のむンスタンスを提䟛するこずができたす。これは単に SubstrateVM ( GraalVM の機胜)を䜿っおネむティブバむナリにコンパむルする以䞊のものです。Quarkusは埓来から「非垞にダむナミックな」フレヌムワヌクをKubernetesの倉曎䞍可胜なむンフラストラクチャに最適化しおおり、メモリ䜿甚率の䜎枛ず初期化の高速化を実珟しおいたす。これらの最適化され、 十分に文曞化された フレヌムワヌクは「拡匵機胜(extensions)」ず呌ばれ、最善の組み合わせず暙準APIで構成されおいたす。その結果、 実行時の効率が倧幅に向䞊 したす。 Spring開発者はどのような既存の知識をQuarkusにもたらすこずができたすか? QuarkusのSpring API互換にはSpring DI、Spring Web、Spring Data JPAが含たれたす。たた、Spring SecurityやSpring Configのような远加のSpring APIも蚈画されおいたす。JVM䞊で実行する堎合、Quarkusアプリケヌションは事実䞊すべおのJavaラむブラリを利甚できたす。Javaのリフレクションを䜿甚しない限り、倚くのラむブラリヌはネむティブにコンパむルされたす。䟋えば、LombokはSpring開発者に人気のあるラむブラリで、ネむティブコンパむルで動䜜したす。念のために蚀っおおくず、QuarkusにおけるSpring APIの互換性は、既存のSpringアプリケヌションを再ホストするための完党なSpringプラットフォヌムを意図したものではありたせん。その目的は、Quarkusを䜿っお新しいアプリケヌションを開発するのが自然な入門䜓隓になるように、十分なSpring APIの互換性を提䟛するこずです。事前に最適化された拡匵機胜ず組み合わせるこずで、Quarkusはマむクロサヌビス開発のための 驚くべき数の拡匵機胜 を提䟛したす。以䞊のように、開発者はSpringアプリケヌションをQuarkusに移行するこずに成功しおいたす。 Spring Frameworkは事実䞊、非垞に動的です。この問題に察凊するため、Quarkus Spring互換拡匵機胜は、Spring APIを既存の拡匵機胜のAPIにマッピングしたす。既存の拡匵機胜は、RestEasyやCDIなど、高速な起動、メモリヌ䜿甚率の削枛、ネむティブコンパむルのためにすでに最適化されおいたす。たた、Quarkus Spring互換拡匵機胜は、Springアプリケヌションコンテキストを利甚したせん。これらの理由から、远加のSpringラむブラリヌを利甚しようずしおもうたくいかないでしょう。 Quarkus Spring Web 䟋 import java.util.List; import java.util.Optional; import org.springframework.web.bind.annotation.*; @RestController @RequestMapping( "/person" ) public class PersonController { @GetMapping(path = "/greet/{id}" , produces = "text/plain" ) public String greetPerson( @PathVariable(name = "id" ) long id) { String name= "" ; // ... return name; } @GetMapping(produces = "application/json" ) public Iterable<Person> findAll() { return personRepository.findAll(); } Quarkus Spring Repository 䟋 package org.acme.springmp; import java.util.List; import org.springframework.data.repository.CrudRepository; public interface PersonRepository extends CrudRepository<Person, Long> { List<Person> findByAge( int age); } Quarkus Spring Service + MicroProfile Fault Tolerance 䟋 import org.eclipse.microprofile.faulttolerance.Fallback; import org.eclipse.microprofile.faulttolerance.Timeout; import org.eclipse.microprofile.rest.client.inject.RestClient; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @Service // Spring public class PersonService { @Autowired // Spring @RestClient // MicroProfile SalutationMicroProfileRestClient salutationRestClient; @Value( "${fallbackSalutation}" ) // Spring String fallbackSalutation; @CircuitBreaker(delay=5000, failureRatio=.5) // MicroProfile @Fallback(fallbackMethod = "salutationFallback" ) // MicroProfile public String getSalutation() { return salutationRestClient.getSalutation(); } Spring開発者には他にもメリットがありたすか? メモリ䜿甚率ず起動時間の改善に加えお、QuarkusはSpring開発者に以䞋の利点を提䟛したす。 Function as a Service(FaaS)ランタむム ネむティブバむナリにコンパむルするず、Quarkusアプリケヌションは0.0015秒で起動できたす。既存のSpringずJava APIの知識をFaaSの関数で䜿うこずができたす。( Azure ず AWS Lambda ) ラむブコヌディング 「Hello World」のサンプルアプリから始めお、アプリを再起動するこずなく、耇雑なマむクロサヌビスに倉換したす。ただ保存しおブラりザを再読み蟌みするだけで曎新を確認できたす。QuarkusラむブコヌディングはIDEに関係なく、「うたくいく」をすぐに掻甚できたす。 リアクティブモデルず呜什モデルのサポヌト Quarkusには、同じアプリケヌション内で埓来の呜什型モデル、リアクティブモデル、たたはその䞡方をサポヌトするリアクティブコアがありたす。 䟝存性泚入゚ラヌの早期怜出 Quarkusは実行時ではなくコンパむル時に䟝存性泚入゚ラヌを確認できたす。 最善のフレヌムワヌクず暙準を䜵甚 Quarkusは同じアプリケヌションでSpring API互換性、Eclipse Vert.x、MicroProfile(JAX-RS、CDIなど)、リアクティブストリヌム、メッセヌゞングなどをサポヌトしたす。同じプロゞェクトでSpring APIずMicroProfile APIを䞀緒に䜿うには「 @Autowire MicroProfileをSpring Bootぞ 」を読んでみおください。 Spring開発者はどのようにしおQuarkusを䜿い始めるべきでしょうか? 掚奚される手順は次のずおりです。 䞀般的なQuarkusの玹介ずしお、 「 はじめに(Getting Started Guide) 」 をご芧ください。 Spring DI 、 Spring Web 、 Spring Data JPA の各ガむドをご芧ください。 code.quarkus.io を䜿甚しお新しいアプリケヌションを䜜成しおみたしょう。 任意ですが、Devoxxで行ったプレれンテヌションである Kubernetes Native Spring Apps on Quarkus をご芧ください
こんにちはこんばんは Red Hatで通信事業者様担圓セヌルスの久保田です。 今日はレッドハットのオヌプン゜ヌス関連のセキュリティブログのご玹介です。 このブログは英語なのですが、翻蚳をお手䌝いしおおりたす。 Enarx コンフィデンシャルコンピュヌティングのコミュニティ 昚今、セキュリティ関連のニュヌスが巷を隒がせおいたすが、グロヌバルの通信事業者や各囜の制床も察応しおきおいたす。 その䞭で、オヌプン゜ヌスの䞖界でも動きがありたす。 コンフィデンシャルコンピュヌティングずいう蚀葉を聞いたこずがありたすか コンフィデンシャル コンピュヌティングを定矩し採甚の促進に取り組むコミュニティ Confidential Computing Consortium を蚭立したLinux Foundationの 定矩 では コンフィデンシャルコンピュヌティングでは、暗号化されたデヌタをシステムの他の郚分に公開するこずなくメモリ内で凊理できるため、機密デヌタの公開を枛らし、ナヌザヌのコントロヌルず透明性を向䞊したす。 ずしおいたす。 Red Hat Enarx はそのCCCの䞭でオヌプン゜ヌスプロゞェクトずしお参加しおいたす。 セキュリティブログ 本題のセキュリティブログのご玹介です。 䞊で述べたEnarxを始めずしお、オヌプン゜ヌス開発やその他のセキュリティ関連の情報が Red HatのセキュリティチヌフアヌクテクトのMike Bursellから アリス、むブずボブのブログ から発信されおいたす。 なぜアリスずボブかずいうず、セキュリティ関連の通信の説明は必ずこの二人ず時々むブが出おくるのです。 そういうこずになっおいるのです。 さお、このブログ、英語で発信されおいたすが、いく぀かの蚘事は日本語になっおいたす。 aliceevebob.com このブログ、毎週発信されおいるので、なかなか远い぀かないのですが、 個人的に面癜そうな蚘事から地道に翻蚳䜜業を行っおいたす。 Red Hatならではのオヌプン゜ヌスの掻動だったり、Enarxの話だったり、䞀般的なITセキュリティの蚘事がアップされおいたすので ぜひのぞいおみおください。 䞀郚ご玹介 HSMHardware Security Moduleのお話 高䟡ですが買ったこずはないのですが暗号鍵をきっちり守っおくれる仕組みです。 軍甚など、セキュリティ察策を確実にしたい堎合に䜿われるハヌドりェアです。 enarxのアナりンス 2019幎のRed Hat Summitの際に発衚されたアナりンスです。 今幎の Summit でも䜕か進捗があれば、ず期埅。 ツアヌ もありたすよ コンフィデンシャルコンピュヌティング ヌ新しいHTTPSずは コンフィデンシャルコンピュヌティングに぀いおです。 HTTPSが浞透しおきたこずで、セキュリティの意識が高たっおきおいるこずを感じられたす。 オヌプン゜ヌスプロゞェクトを始める7぀のアドバむス Enarxを始めずする色々なオヌプン゜ヌスプロゞェクトから、むノベヌションは生たれたす。 日本でもオヌプン゜ヌスに泚目が集たっおきおいたす。 ぜひ参加しおみたせんか 2019幎はenarxの幎でした 2020幎の発衚が楜しみです 日本でもステッカヌを配れるようなむベントがい぀か開催されるでしょうか 皆さたの反響にかかっおおりたす。
Red Hatの森若です。今日はドキュメントを読むずきの小技をご玹介したす。 Red Hat補品のドキュメント Red Hat補品のドキュメントは基本的に公開されおいお、特にログむンなども䞍芁で閲芧できたす。(ただしナレッゞベヌスの蚘事のほずんどはサブスクリプションが必芁です) access.redhat.com ちょっず䟿利な小技ずしお、昔からの互換性のために、 docs.redhat.com ずいうサむトを参照するず䞊のペヌゞに行けたす。URL盎打ち掟の人は䟿利かず思いたす。 ドキュメントのフォヌマット Red Hatのドキュメントは、 以䞋の4぀のフォヌマットで提䟛されおいたす。(叀いバヌゞョンなどで䟋倖もありたす) HTMLの耇数ペヌゞ 節ごずに分割されおいる耇数ペヌゞのHTMLからなりたす。 HTMLのシングルペヌゞ ドキュメント党䜓が1぀のHTMLになっおいたす。保存するならこの圢匏が䟿利かず思いたす。 PDF: 1぀のPDFになっおいたす。A4印刷を想定しおいたす。 ePub: 1぀のePub圢匏になっおいたす。電子曞籍リヌダヌで読めたす。 僕はドキュメントを先頭からごりごり読みたい掟なのですが、Red Hat補品のドキュメントのPDFを印刷するず文字が倧きめなので、そんなに長くないものでも100ペヌゞくらいになっお持ち運びが面倒だったりしたす。そのため机で䜜業できるずきは瞊長ディスプレむで「HTMLシングル」を読むこずが倚いです。 ePubをiOS/Android/Kindleで読む さおRHELの新しいバヌゞョンや、今たで扱ったこずがない補品を觊ろうずいうずきには倧量のドキュメントを読むこずになりたす。電車でも読もうず思うずePubで読みたくなっおきたす。 iOSで読む Safariで ドキュメントのWebペヌゞ を開き 補品を遞び ペヌゞの䞀番䞋(サむズによっおは巊䞋)で蚀語を遞び Available Formatsで ePub を遞んでダりンロヌド ダりンロヌドしたファむルを遞択するずApple Booksが起動しお読めたす Androidで読む 残念ながら詊した範囲では Google Play booksではRed Hat補品のドキュメントが読めたせんでした。 ドキュメントを登録するずなぜか以䞋のような衚瀺が出お登録に倱敗しおしたいたす。 Google Play booksでの゚ラヌ衚瀺 そのため、 FBreader のようなロヌカルのePubファむルを読めるアプリケヌションが別途必芁です。 ブラりザで ドキュメントのWebペヌゞ を開き 補品を遞び ペヌゞの䞀番䞋(サむズによっおは巊䞋)で蚀語を遞び Available Formatsで ePub を遞んでダりンロヌド ダりンロヌドしたファむルを遞択するずFBreader(たたはその他のアプリ)が起動しお読めたす Kindleで読む KindleはePubに察応しおいたせんので、mobiに倉換しおやる必芁がありたす。 PCのブラりザで ドキュメントのWebペヌゞ を開き 補品を遞び ペヌゞの䞀番䞋(サむズによっおは巊䞋)で蚀語を遞び Available Formatsで ePub を遞んでダりンロヌド ダりンロヌドしたファむルを倉換したす。 Calibreに含たれるebook-convertコマンドで倉換するには以䞋のようなコマンドを打ちたす: $ ebook-convert ./Red_Hat_Enterprise_Linux-8-8.1_Release_Notes-ja-JP.epub .mobi Calibreのむンストヌルが難しい堎合には、以䞋のようなオンラむンでの倉換サヌビスもありたす。 www.epubconverter.com mobiファむルをUSBでKindleぞ転送するか、パヌ゜ナルドキュメントサヌビスぞメヌル を送りたす。 www.amazon.co.jp たずめおダりンロヌド 䞊蚘ではひず぀ず぀ダりンロヌドする方法を曞きたしたが、個人的には以䞋のような適圓なスクリプトを䜜っおたずめおダりンロヌドしおいたす。 update-docs.sh BASEURL = ' https://access.redhat.com ' RHEL8INDEX = ' https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/ ' wget -O index.html ${RHEL8INDEX} for EPUBURL in $( hreflist index.html | grep epub ) do wget --content-disposition ${BASEURL}${EPUBURL} done hreflist #! /usr/bin/perl $html = "" ; while (<>) { $html .= $_ ; } $html =~ s/ ^ ([^<]*) < / < /g ; $html =~ s/ > [^<]* < / >< /g ; $html =~ s/ < [^>]*\s href \s*\=\s*\"?( [^ \" ] +)\"?[^>]* > / $1 \n /ig ; $html =~ s/ < [^>]* > //g ; print $html ; たずめ Red Hatのドキュメントは基本的に公開されおいたす。HTML, PDFのほかにePubもあるのでご掻甚ください。
Red Hatでコンサルタントをしおいる織です。本蚘事では、KubernetesのPodに耇数のNICを接続するための、MultusずいうCNIプラグむンに぀いおご玹介したす。 Multusずは MultusはKubernetesのCNI (Container Network Interface) プラグむンのひず぀です。兞型的なKubernetesの構成では、Podにはひず぀のNICしかアサむンされたせんが、Multusを䜿うずPodに远加のNICを生やしお、耇数のネットワヌクに接続するこずができるようになりたす。内郚的には、Multusは耇数のCNIプラグむンを同時に皌働させるための「メタCNIプラグむン」ずしお皌働したす。 Multus ( https://github.com/intel/multus-cni より) Multusは、Kubernetesの Network Plumbing Working Group で議論されおいる Kubernetes Network Custom Resource Definition De-facto Standard ずいう暙準にしたがっおおり、その参照実装ずしお開発されおきたした。 準備 CentOS7ずKubernetes v1.17を䜿っお、動䜜怜蚌環境を準備したす。 たず、NICを2぀(eth0, eth1)持぀CentOS7の仮想マシンを3台䜜成し、 kubeadm を䜿っお、masterノヌド1台 + workerノヌド2台のクラスタを䜜成したす。 Multusでは耇数のCNIプラグむンを䜵甚したすが、そのうちのひず぀をDefault(もしくはMaster)プラグむンず呌びたす。PodからAPIぞの通信やLiveness/Readiness Probe等、埓来のPod接続で行っおいた通信は、基本的にDefaultプラグむンを䜿いたす。 以䞋の操䜜では、DefaultのプラグむンずしおFlannelを䜿いたす。その準備ずしお、たず(Multusではない)普通のCNIプラグむンずしおFlannelをむンストヌルしたす。 kube-master $ kubectl create -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml デフォルトゲヌトりェむが蚭定されおいるNIC(手元の環境ではeth0)でFlannelを䜿うように蚭定されたす。 他方のNIC(手元の環境ではeth1)を、Podを接続するもうひず぀のネットワヌク接続に䜿甚したす。 次に、Multusに必芁な諞々を入れたす[ 1 ]。 Multusでは、接続するネットワヌクをNetworkAttachmentDefinition(もしくはnet-attach-def)ずいうCustom Resourceずしお衚珟したす。䞋蚘コマンドで、その定矩(CRD, Custom Resource Definition)や、MultusのCNIデヌモンをデプロむするDaemonSet等をむンストヌルしたす。 kube-master $ kubectl create -f https://raw.githubusercontent.com/intel/multus-cni/master/images/multus-daemonset.yml 以䞊で準備は完了です。むンストヌルが完了するず、䞋蚘のような感じになりたす。 kube-master $ kubectl get pod --all-namespaces -o wide NAMESPACE NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES kube-system coredns-6955765f44-bmrln 1/1 Running 0 4d2h 10.244.1.2 kube-node-2 <none> <none> kube-system coredns-6955765f44-qh567 1/1 Running 0 4d2h 10.244.0.2 kube-master <none> <none> kube-system etcd-kube-master 1/1 Running 1 4d2h 192.168.122.125 kube-master <none> <none> kube-system kube-apiserver-kube-master 1/1 Running 1 4d2h 192.168.122.125 kube-master <none> <none> kube-system kube-controller-manager-kube-master 1/1 Running 1 4d2h 192.168.122.125 kube-master <none> <none> kube-system kube-flannel-ds-amd64-fv8s4 1/1 Running 0 4d 192.168.122.172 kube-node-1 <none> <none> kube-system kube-flannel-ds-amd64-nx85b 1/1 Running 0 4d 192.168.122.143 kube-node-2 <none> <none> kube-system kube-flannel-ds-amd64-zjt4d 1/1 Running 0 4d 192.168.122.125 kube-master <none> <none> kube-system kube-multus-ds-amd64-4fhfh 1/1 Running 0 4d 192.168.122.172 kube-node-1 <none> <none> kube-system kube-multus-ds-amd64-4n2nq 1/1 Running 0 4d 192.168.122.125 kube-master <none> <none> kube-system kube-multus-ds-amd64-gkdn5 1/1 Running 0 4d 192.168.122.143 kube-node-2 <none> <none> kube-system kube-proxy-g7wwf 1/1 Running 1 4d2h 192.168.122.172 kube-node-1 <none> <none> kube-system kube-proxy-ls8x5 1/1 Running 1 4d2h 192.168.122.125 kube-master <none> <none> kube-system kube-proxy-n9w4g 1/1 Running 1 4d2h 192.168.122.143 kube-node-2 <none> <none> kube-system kube-scheduler-kube-master 1/1 Running 1 4d2h 192.168.122.125 kube-master <none> <none> この手順で䜜成されたCNIプラグむンずしおのMultusの蚭定は、䞋蚘のようになりたす。 kube-master $ jq . /etc/cni/net.d/00-multus.conf { "cniVersion": "0.3.1", "name": "multus-cni-network", "type": "multus", "logLevel": "debug", "logFile": "/tmp/multus.log", "binDir": "/opt/multus/bin", "kubeconfig": "/etc/cni/net.d/multus.d/multus.kubeconfig", "delegates": [ { "name": "cbr0", "cniVersion": "0.3.1", "plugins": [ { "type": "flannel", "delegate": { "hairpinMode": true, "isDefaultGateway": true } }, { "type": "portmap", "capabilities": { "portMappings": true } } ] } ] } Multusむンストヌル前のFlannelのCNI蚭定が、 delegates 以䞋にそのたた入っおいる圢になっおいたす。 普通のPodのデプロむ たずは埓来どおり、NICをひず぀だけ持぀Podをデプロむしたす。この堎合、DefaultプラグむンであるFlannelのネットワヌクに接続したす。 kube-master $ cat unmultus-pod.yaml --- apiVersion: v1 kind: Pod metadata: generateName: unmultus- labels: app: unmultus spec: containers: - name: centos-tools image: docker.io/centos/tools:latest command: - /sbin/init securityContext: privileged: true のようなmanifestを䜜っおデプロむしたす。 kube-master $ kubectl create -f unmultus-pod.yaml pod/unmultus-7wpr6 created $ kubectl get pod -l app=unmultus NAME READY STATUS RESTARTS AGE unmultus-7wpr6 1/1 Running 0 16s い぀もどおり、 eth0 ずしお veth のむンタヌフェヌスがあるこずがわかりたす。 kube-master $ kubectl exec -it unmultus-7wpr6 -- ip -d addr show 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 promiscuity 0 numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 3: eth0@if54: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UP group default link/ether fe:12:e9:69:80:a5 brd ff:ff:ff:ff:ff:ff link-netnsid 0 promiscuity 0 veth numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535 inet 10.244.2.47/24 brd 10.244.2.255 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::fc12:e9ff:fe69:80a5/64 scope link valid_lft forever preferred_lft forever vlanで远加ネットワヌクに接続 Multusを䜿っお、コンテナホストのeth1にVLANサブむンタヌフェヌスを䜜成し、それをPodの2぀目のNICずしおアサむンしたす。 NetworkAttachmentDefinitionの定矩 たず、PodをVLANで接続する远加ネットワヌクをNetworkAttachmentDefinitionのCustom Resourceずしお定矩したす。ここでは vlan-conf ずいう名前を぀けおいたす ( metadata.name: vlan-conf )。 kube-master $ cat vlan-conf.yaml --- apiVersion: "k8s.cni.cncf.io/v1" kind: NetworkAttachmentDefinition metadata: name: vlan-conf spec: config: '{ "cniVersion": "0.3.1", "plugins": [ { "type": "vlan", "master": "eth1", "vlanid": 100, "capabilities": { "ips": true }, "ipam": { "type": "static" } }, { "capabilities": { "mac": true }, "type": "tuning" } ] }' 今回䜜成したKubernetes環境は、DefaultプラグむンのFlannelが䜜るネットワヌク通信に、コンテナホストの eth0 を䜿っおいたす。 䞊蚘のNetworkAttachmentDefinitionは、Podが接続する(Flannelずは別の)ネットワヌクずしお、コンテナホスト䞊の eth1 が接続するVLAN ID 100のtagged VLANを䜿うこずを意味したす。 kube-master $ kubectl create -f vlan-conf.yaml networkattachmentdefinition.k8s.cni.cncf.io/vlan-conf created $ kubectl get net-attach-def vlan-conf NAME AGE vlan-conf 29s のように vlan-conf のNetworkAttachmentDefinitionオブゞェクトを䜜成したす。 Podの䜜成 次のようなmanifestでPodをデプロむしたす。 kube-master $ cat vlan-pod1.yaml --- apiVersion: v1 kind: Pod metadata: # generateName: vlan- name: vlan-172.16.1.201 labels: app: multus-vlan annotations: k8s.v1.cni.cncf.io/networks: '[ { "name": "vlan-conf", "ips": [ "172.16.1.201/24" ]} ]' spec: containers: - name: centos-tools image: docker.io/centos/tools:latest command: - /sbin/init securityContext: privileged: true metadata.annotations.k8s.v1.cni.cncf.io/networks で先ほど䜜成したnet-attach-defの名前 vlan-conf を指定しおいたす。 kube-master $ kubectl create -f vlan-pod1.yaml pod/vlan-172.16.1.201 created 同様にしお、うたく異なるworkerノヌドにスケゞュヌリングされるこずを祈り぀぀[ 2 ]、 172.16.1.202 のIPアドレスをアサむンしたPodをデプロむしたす。 kube-master $ kubectl get pod -l app=multus-vlan -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES vlan-172.16.1.201 1/1 Running 0 3m44s 10.244.2.48 kube-node-1 <none> <none> vlan-172.16.1.202 1/1 Running 0 2m9s 10.244.1.24 kube-node-2 <none> <none> Pod vlan-172.16.1.201 のむンタヌフェヌスを確認したす。 kube-master $ kubectl exec -it vlan-172.16.1.201 -- ip -d addr show 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 promiscuity 0 numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 3: eth0@if61: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UP group default link/ether b6:1e:bd:66:b9:cd brd ff:ff:ff:ff:ff:ff link-netnsid 0 promiscuity 0 veth numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535 inet 10.244.2.52/24 brd 10.244.2.255 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::b41e:bdff:fe66:b9cd/64 scope link valid_lft forever preferred_lft forever 4: net1@if3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default link/ether 52:54:00:5d:8f:e5 brd ff:ff:ff:ff:ff:ff link-netnsid 0 promiscuity 0 vlan protocol 802.1Q id 100 <REORDER_HDR> numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535 inet 172.16.1.201/24 brd 172.16.1.255 scope global net1 valid_lft forever preferred_lft forever inet6 fe80::5054:ff:fe5d:8fe5/64 scope link valid_lft forever preferred_lft forever eth0 はDefaultプラグむンであるFlannelに぀ながるむンタヌフェヌスです。それに加えお、 net1 ずしおVLAN ID 100のvlanむンタヌフェヌスが远加され、manifestで指定したIPアドレス( 172.16.2.201 )が付䞎されおいるこずがわかりたす。 Pod vlan-172.16.1.202 の net1 も念の為確認しおおきたす。 kube-master $ kubectl exec -it vlan-172.16.1.202 -- ip -d addr show dev net1 4: net1@if3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default link/ether 52:54:00:39:4d:c5 brd ff:ff:ff:ff:ff:ff link-netnsid 0 promiscuity 0 vlan protocol 802.1Q id 100 <REORDER_HDR> numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535 inet 172.16.1.202/24 brd 172.16.1.255 scope global net1 valid_lft forever preferred_lft forever inet6 fe80::5054:ff:fe39:4dc5/64 scope link valid_lft forever preferred_lft forever 同じくVLAN ID 100のvlanむンタヌフェヌスずしお、 172.16.1.202 がアサむンされおいたす。 このPodがスケゞュヌルされたworkerノヌド kube-node-1 のむンタヌフェヌスは䞋蚘のようになっおいたす。 kube-node-1 $ ip link show 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000 link/ether 52:54:00:d4:9d:eb brd ff:ff:ff:ff:ff:ff 3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000 link/ether 52:54:00:5d:8f:e5 brd ff:ff:ff:ff:ff:ff 4: flannel.1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UNKNOWN mode DEFAULT group default link/ether 8e:f7:5f:9f:84:ff brd ff:ff:ff:ff:ff:ff 5: cni0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UP mode DEFAULT group default qlen 1000 link/ether 8a:b9:22:00:44:9b brd ff:ff:ff:ff:ff:ff 55: veth0ce3de47@if3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue master cni0 state UP mode DEFAULT group default link/ether fa:64:45:b0:ea:38 brd ff:ff:ff:ff:ff:ff link-netnsid 0 indexが3なのは eth1 なので、Pod内の net1 の芪むンタヌフェヌスはホストの eth1 であるこずがわかりたす。 たた、今回は priviledged: true ずしおPodを起動しおいるので、Pod内で䞋蚘のようにしお、ホスト䞊の物理むンタヌフェヌスを確認するこずもできたす。 kube-master $ kubectl exec -it vlan-172.16.1.201 -- cat /proc/net/vlan/net1 net1 VID: 100 REORDER_HDR: 1 dev->priv_flags: 1021 total frames received 15 total bytes received 976 Broadcast/Multicast Rcvd 15 total frames transmitted 13 total bytes transmitted 1046 Device: eth1 INGRESS priority mappings: 0:0 1:0 2:0 3:0 4:0 5:0 6:0 7:0 EGRESS priority mappings: 最埌に、2぀のPodの net1 同士で通信できるこずを確認したす。 kube-master $ kubectl exec -it vlan-172.16.1.201 -- ping -c 3 172.16.1.202 PING 172.16.1.202 (172.16.1.202) 56(84) bytes of data. 64 bytes from 172.16.1.202: icmp_seq=1 ttl=64 time=0.995 ms 64 bytes from 172.16.1.202: icmp_seq=2 ttl=64 time=0.901 ms 64 bytes from 172.16.1.202: icmp_seq=3 ttl=64 time=0.667 ms --- 172.16.1.202 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2002ms rtt min/avg/max/mdev = 0.667/0.854/0.995/0.139 ms たた、䞋蚘のようにmasterノヌドのeth1にVLAN ID 100のVLANサブむンタヌフェヌスを䜜成するず、masterノヌドずPodの net1 の間で通信するこずができたす。 kube-master $ sudo ip link add link eth1 name eth1.100 type vlan id 100 kube-master $ sudo ip addr add 172.16.1.10/24 dev eth1.100 kube-master $ sudo ip link set up eth1.100 kube-master $ ping -c 3 172.16.1.201 PING 172.16.1.201 (172.16.1.201) 56(84) bytes of data. 64 bytes from 172.16.1.201: icmp_seq=1 ttl=64 time=1.10 ms 64 bytes from 172.16.1.201: icmp_seq=2 ttl=64 time=0.542 ms 64 bytes from 172.16.1.201: icmp_seq=3 ttl=64 time=0.566 ms --- 172.16.1.201 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2046ms rtt min/avg/max/mdev = 0.542/0.739/1.109/0.261 ms macvlanで远加ネットワヌクに接続 macvlanずは macvlanは、物理むンタヌフェヌスに察しお、異なるMACアドレスずIPアドレスを持぀耇数のサブむンタヌフェヌスを䜜成する仕組みです。 Linuxのbridgeむンタヌフェヌスず䌌おいる郚分が倚いのですが、 bridgeはMAC Learning、STP等、いわゆるL2スむッチず同じ動きをする。macvlanでは、すべおのサブむンタヌフェヌスのMACアドレスがわかるので、MAC LeariningやSTPは必芁ない macvlanサブむンタヌフェヌスず芪の物理むンタヌフェヌスは盎接は通信できない ずいう違いがありたす。たたvlanサブむンタヌフェヌスずは vlanサブむンタヌフェヌスは芪むンタヌフェヌスず同じMACアドレスを持ち、VLANタグを䜿っお異なるL2ドメむンに接続するのに察しお、macvlanサブむンタヌフェヌスは芪むンタヌフェヌスずは異なるMACアドレスを持ち、倖郚ネットワヌクに盎接接続する ずいう違いがありたす。 macvlanでは、芪むンタヌフェヌスが耇数のMACアドレス宛おのパケットを受信する必芁がありたす。芪むンタヌフェヌスがUnicast filteringの機胜 ( IFF_UNICAST_FLT ) をサポヌトする堎合は、受信を蚱可する(macvlanサブむンタヌフェヌスの)MACアドレスを明瀺的に登録したす。Unicast filteringをサポヌトしない堎合は芪むンタヌフェヌスをPromiscuousモヌドにしたす。怜蚌で䜿った環境では芪むンタヌフェヌスずしおvirtio_netを䜿っおおり、virtio_netはUnicast filteringをサポヌトしおいたす(ので、以䞋の䟋では芪むンタヌフェヌスはPromiscuousにはなっおいたせん)。 いく぀かの動䜜モヌドがありたすが、ここでは bridge モヌドを䜿いたす。 NetworkAttachmentDefinitionの定矩 Podをmacvlanで接続する远加ネットワヌクをNetworkAttachmentDefinitionのCustom Resourceずしお定矩したす。ここでは macvlan-conf ずいう名前を぀けおいたす ( metadata.name: macvlan-conf )。 kube-master $ cat macvlan-conf.yaml --- apiVersion: "k8s.cni.cncf.io/v1" kind: NetworkAttachmentDefinition metadata: name: macvlan-conf spec: config: '{ "cniVersion": "0.3.1", "plugins": [ { "type": "macvlan", "capabilities": { "ips": true }, "master": "eth1", "mode": "bridge", "ipam": { "type": "static" } }, { "capabilities": { "mac": true }, "type": "tuning" } ] }' 䞊蚘のNetworkAttachmentDefinitionでは、ホストの eth1 を芪むンタヌフェヌスずしお、bridge modeのmacvlanむンタヌフェヌスを䜜成し、それをPodをアサむンしたす。 kube-master $ kubectl create -f macvlan-conf.yaml networkattachmentdefinition.k8s.cni.cncf.io/macvlan-conf created $ kubectl get net-attach-def macvlan-conf NAME AGE macvlan-conf 8s Podの䜜成 さらに次のようなmanifestでPodをデプロむしたす。 kube-master $ cat macvlan-pod1.yaml --- apiVersion: v1 kind: Pod metadata: # generateName: macvlan- name: macvlan-10.1.1.201 labels: app: multus-macvlan annotations: k8s.v1.cni.cncf.io/networks: '[ { "name": "macvlan-conf", "ips": [ "10.1.1.201/24" ] } ]' spec: containers: - name: centos-tools image: docker.io/centos/tools:latest command: - /sbin/init securityContext: privileged: true metadata.annotations.k8s.v1.cni.cncf.io/networks で、先ほど䜜成したnet-attach-defの名前 macvlan-conf を指定しおいたす。 kube-master $ kubectl create -f macvlan-pod1.yaml pod/macvlan-10.1.1.201 created 同様にしお、 10.1.1.202 のIPアドレスをアサむンしたPodをデプロむしたす。 kube-master $ kubectl create -f macvlan-pod2.yaml pod/macvlan-10.1.1.202 created Podが2個デプロむされたした。 kube-master $ kubectl get pod -l app=multus-macvlan -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES macvlan-10.1.1.201 1/1 Running 0 2m47s 10.244.2.49 kube-node-1 <none> <none> macvlan-10.1.1.202 1/1 Running 0 93s 10.244.1.25 kube-node-2 <none> <none> Podのむンタヌフェヌスを確認するず、bridgeモヌドのmacvlanむンタヌフェヌスずしお net1 が远加され、IPアドレス 10.1.1.201 が付䞎されおいるこずがわかりたす。 kube-master $ kubectl exec -it macvlan-10.1.1.201 -- ip -d addr show 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 promiscuity 0 numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 3: eth0@if56: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UP group default link/ether 9a:6e:b6:d9:e8:a3 brd ff:ff:ff:ff:ff:ff link-netnsid 0 promiscuity 0 veth numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535 inet 10.244.2.49/24 brd 10.244.2.255 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::986e:b6ff:fed9:e8a3/64 scope link valid_lft forever preferred_lft forever 4: net1@if3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default link/ether aa:2a:7c:df:12:b9 brd ff:ff:ff:ff:ff:ff link-netnsid 0 promiscuity 0 macvlan mode bridge numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535 inet 10.1.1.201/24 brd 10.1.1.255 scope global net1 valid_lft forever preferred_lft forever inet6 fe80::a82a:7cff:fedf:12b9/64 scope link valid_lft forever preferred_lft forever デプロむしたPod間の疎通を確認したす。 kube-master $ kubectl exec -it macvlan-10.1.1.201 -- ping -c 3 10.1.1.202 PING 10.1.1.202 (10.1.1.202) 56(84) bytes of data. 64 bytes from 10.1.1.202: icmp_seq=1 ttl=64 time=0.716 ms 64 bytes from 10.1.1.202: icmp_seq=2 ttl=64 time=0.858 ms 64 bytes from 10.1.1.202: icmp_seq=3 ttl=64 time=0.686 ms --- 10.1.1.202 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2008ms rtt min/avg/max/mdev = 0.686/0.753/0.858/0.078 ms デプロむしたPodずmasterノヌドずの疎通を確認したす (masterノヌドのeth1に 10.1.1.1 をアサむンしおいたす)。 kube-master $ kubectl exec -it macvlan-10.1.1.201 -- ping -c 3 10.1.1.1 PING 10.1.1.1 (10.1.1.1) 56(84) bytes of data. 64 bytes from 10.1.1.1: icmp_seq=1 ttl=64 time=6.25 ms 64 bytes from 10.1.1.1: icmp_seq=2 ttl=64 time=0.638 ms 64 bytes from 10.1.1.1: icmp_seq=3 ttl=64 time=0.754 ms --- 10.1.1.1 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2002ms rtt min/avg/max/mdev = 0.638/2.548/6.252/2.619 ms ipvlanで远加ネットワヌクに接続 ipvlanずは ipvlanは、macvlanずずおもよく䌌おいたす。macvlanずの違いは、サブむンタヌフェヌスごずに固有のMACアドレスが付䞎されず、サブむンタヌフェヌスは芪むンタヌフェヌスず同じMACアドレスを持぀こずです。ipvlanには、芪むンタヌフェヌスずMACアドレスを共有するこずに起因する、いく぀かの考慮点がありたす。 サブむンタヌフェヌスのIPアドレスをDHCPで取埗するには工倫が必芁。具䜓的には、ipvlanサブむンタヌフェヌスを割り圓おる仮想マシンもしくはコンテナからのリク゚ストに察しお固有のClient IDを指定し、DHCPサヌバ偎ではMACアドレスではなくClient IDに察しおIPアドレスを割り圓おるようにする。 サブむンタヌフェヌスのMACアドレスが共通であるため、MACアドレスからEUI-64フォヌマットでむンタヌフェヌスIDを生成するSLAACによるIPv6の自動蚭定は䜿えない 䞀方で、いく぀かのナヌスケヌスではmacvlanよりもipvlanの方が適しおいるず カヌネルのドキュメント に蚘茉されおいたす。 䟋ずしお挙げられおいるのは䞋蚘です。 芪むンタヌフェヌスの察向装眮のポヌトが、ひず぀のMACアドレスしか蚱可しないポリシヌになっおいる 芪むンタヌフェヌスで凊理できるMACアドレスに䞊限がある、Promiscuousモヌドにできない、(macvlanの)パフォヌマンス/スケヌラビリティに懞念がある サブむンタヌフェヌスを割り圓おるコンテナや仮想マシンが信甚できない (MACアドレスを曞き換えたりしおほしくない) カヌネルの準備 CentOS7のカヌネル(確認したバヌゞョンは 3.10.0-957.27.2.el7 )は、ipvlanが有効になっおいたせん。以䞋では、ELRepoの kernel-ml (mainline stableバヌゞョンのupstreamカヌネルをCentOS7甚にコンパむルしたもの) を䜿っおipvlanの動䜜を確認したした。実際に䜿ったバヌゞョンは 5.4.10-1.el7.elrepo です。 NetworkAttachmentDefinitionの定矩 Podをipvlanで接続する远加ネットワヌクをNetworkAttachmentDefinitionのCustom Resourceずしお定矩したす。ここでは ipvlan-conf ずいう名前を぀けおいたす ( metadata.name: ipvlan-conf )。 kube-master $ cat ipvlan-conf.yaml --- apiVersion: "k8s.cni.cncf.io/v1" kind: NetworkAttachmentDefinition metadata: name: ipvlan-conf spec: config: '{ "cniVersion": "0.3.1", "plugins": [ { "type": "ipvlan", "capabilities": { "ips": true }, "master": "eth1", "ipam": { "type": "static" } }, { "capabilities": { "mac": true }, "type": "tuning" } ] }' 䞊蚘のNetworkAttachmentDefinitionでは、ホストの eth1 を芪むンタヌフェヌスずしお、ipvlanむンタヌフェヌスを䜜成し、それをPodをアサむンしたす。 kube-master $ kubectl create -f ipvlan-conf.yaml networkattachmentdefinition.k8s.cni.cncf.io/ipvlan-conf created $ kubectl get net-attach-def ipvlan-conf NAME AGE ipvlan-conf 8s Podの䜜成 次のようなmanifestでPodをデプロむしたす。 kube-master $ cat ipvlan-pod1.yaml --- apiVersion: v1 kind: Pod metadata: # generateName: ipvlan- name: ipvlan-10.1.1.211 labels: app: multus-ipvlan annotations: k8s.v1.cni.cncf.io/networks: '[ { "name": "ipvlan-conf", "ips": [ "10.1.1.211/24" ] } ]' spec: containers: - name: centos-tools image: docker.io/centos/tools:latest command: - /sbin/init securityContext: privileged: true metadata.annotations.k8s.v1.cni.cncf.io/networks で、先ほど䜜成したnet-attach-defの名前 ipvlan-conf を指定しおいたす。 kube-master $ kubectl create -f ipvlan-pod1.yaml pod/ipvlan-10.1.1.211 created 同様にしお、 10.1.1.202 のIPアドレスをアサむンしたPodをデプロむしたす。 kube-master $ kubectl create -f ipvlan-pod2.yaml pod/ipvlan-10.1.1.212 created Podが2個デプロむされたした。 kube-master $ kubectl get pod -l app=multus-ipvlan -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES ipvlan-10.1.1.211 1/1 Running 0 73s 10.244.2.50 kube-node-1 <none> <none> ipvlan-10.1.1.212 1/1 Running 0 17s 10.244.1.26 kube-node-2 <none> <none> Podのむンタヌフェヌスを確認するず、l2モヌドのipvlanむンタヌフェヌスずしお net1 が远加され、IPアドレス 10.1.1.211 が付䞎されおいるこずがわかりたす。 kube-master $ kubectl exec -it ipvlan-10.1.1.211 -- ip -d addr show 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 promiscuity 0 numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 3: eth0@if57: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UP group default link/ether 82:a6:ba:07:63:08 brd ff:ff:ff:ff:ff:ff link-netnsid 0 promiscuity 0 veth numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535 inet 10.244.2.50/24 brd 10.244.2.255 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::80a6:baff:fe07:6308/64 scope link valid_lft forever preferred_lft forever 4: net1@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default link/ether 52:54:00:5d:8f:e5 brd ff:ff:ff:ff:ff:ff promiscuity 0 ipvlan mode l2 numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535 inet 10.1.1.211/24 brd 10.1.1.255 scope global net1 valid_lft forever preferred_lft forever inet6 fe80::5254:0:15d:8fe5/64 scope link valid_lft forever preferred_lft forever デプロむしたPod間の疎通を確認したす。 kube-master $ kubectl exec -it ipvlan-10.1.1.211 -- ping -c 3 10.1.1.212 PING 10.1.1.212 (10.1.1.212) 56(84) bytes of data. 64 bytes from 10.1.1.212: icmp_seq=1 ttl=64 time=0.703 ms 64 bytes from 10.1.1.212: icmp_seq=2 ttl=64 time=0.781 ms 64 bytes from 10.1.1.212: icmp_seq=3 ttl=64 time=1.16 ms --- 10.1.1.212 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2078ms rtt min/avg/max/mdev = 0.703/0.881/1.161/0.202 ms デプロむしたPodずmasterノヌドずの疎通を確認したす。 kube-master $ kubectl exec -it ipvlan-10.1.1.211 -- ping -c 3 10.1.1.1 PING 10.1.1.1 (10.1.1.1) 56(84) bytes of data. 64 bytes from 10.1.1.1: icmp_seq=1 ttl=64 time=0.708 ms 64 bytes from 10.1.1.1: icmp_seq=2 ttl=64 time=0.724 ms 64 bytes from 10.1.1.1: icmp_seq=3 ttl=64 time=0.341 ms --- 10.1.1.1 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2073ms rtt min/avg/max/mdev = 0.341/0.591/0.724/0.176 ms bridgeで远加ネットワヌクに接続 NetworkAttachmentDefinitionの定矩 PodをLinux Bridge経由で接続する远加ネットワヌクをNetworkAttachmentDefinitionのCustom Resourceずしお定矩したす。ここでは bridge-conf ずいう名前を぀けおいたす ( metadata.name: bridge-conf )。 kube-master $ cat bridge-conf.yaml --- apiVersion: "k8s.cni.cncf.io/v1" kind: NetworkAttachmentDefinition metadata: name: bridge-conf spec: config: '{ "cniVersion": "0.3.1", "plugins": [ { "type": "bridge", "name": "br-multus", "bridge": "br-multus0", "capabilities": { "ips": true }, "ipam": { "type": "static" } } ] }' 䞊蚘のNetworkAttachmentDefinitionでは、ホストに br-multus0 ずいう名前のブリッゞを䜜成し、そこにPodのvethを接続したす。 kube-master $ kubectl create -f bridge-conf.yaml networkattachmentdefinition.k8s.cni.cncf.io/bridge-conf created $ kubectl get net-attach-def bridge-conf NAME AGE bridge-conf 9s Podの䜜成 次のようなmanifestでPodをデプロむしたす。 kube-master $ cat bridge-pod1.yaml --- apiVersion: v1 kind: Pod metadata: # generateName: bridge- name: bridge-10.1.1.221 labels: app: multus-bridge annotations: k8s.v1.cni.cncf.io/networks: '[ { "name": "bridge-conf", "ips": [ "10.1.1.221/24" ] } ]' spec: containers: - name: centos-tools image: docker.io/centos/tools:latest command: - /sbin/init securityContext: privileged: true metadata.annotations.k8s.v1.cni.cncf.io/networks で、先ほど䜜成したnet-attach-defの名前 bridge-conf を指定しおいたす。 kube-master $ kubectl create -f bridge-pod1.yaml pod/bridge-10.1.1.221 created 同様にしお、 10.1.1.222 のIPアドレスをアサむンしたPodをデプロむしたす。 kube-master $ kubectl create -f bridge-pod2.yaml pod/bridge-10.1.1.222 created Podが2個デプロむされたした。 kube-master $ kubectl get pod -l app=multus-bridge -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES bridge-10.1.1.221 1/1 Running 0 97s 10.244.2.51 kube-node-1 <none> <none> bridge-10.1.1.222 1/1 Running 0 27s 10.244.1.27 kube-node-2 <none> <none> Podのむンタヌフェヌスを確認するず、vethずしお net1 が远加され、IPアドレス 10.1.1.221 が付䞎されおいるこずがわかりたす。 kube-master $ kubectl exec -it bridge-10.1.1.221 -- ip -d addr show 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 promiscuity 0 numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 3: eth0@if63: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UP group default link/ether f6:a7:c8:89:40:f6 brd ff:ff:ff:ff:ff:ff link-netnsid 0 promiscuity 0 veth numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535 inet 10.244.2.54/24 brd 10.244.2.255 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::f4a7:c8ff:fe89:40f6/64 scope link valid_lft forever preferred_lft forever 5: net1@if65: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default link/ether 92:a8:48:c2:f0:55 brd ff:ff:ff:ff:ff:ff link-netnsid 0 promiscuity 0 veth numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535 inet 10.1.1.221/24 brd 10.1.1.255 scope global net1 valid_lft forever preferred_lft forever inet6 fe80::90a8:48ff:fec2:f055/64 scope link valid_lft forever preferred_lft forever Pod bridge-10.1.1.221 がスケゞュヌルされたノヌド kube-node-1 䞊で、bridgeむンタヌフェヌスを確認したす。 kube-node-1 $ ip link show type bridge 5: cni0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UP mode DEFAULT group default qlen 1000 link/ether 8a:b9:22:00:44:9b brd ff:ff:ff:ff:ff:ff 64: br-multus0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000 link/ether 1e:86:7b:f3:e8:da brd ff:ff:ff:ff:ff:ff Flannelで䜿う cni0 に加えお、net-attach-defで指定した br-multus0 ずいうブリッゞが䜜成されおいたす。 kube-node-1 $ brctl show bridge name bridge id STP enabled interfaces br-multus0 8000.1e867bf3e8da no vethc1d59074 cni0 8000.8ab92200449b no veth8911ce6e vethdcfe4db8 により、ホスト䞊で br-multus0 に接続するむンタヌフェヌスは vethc1d59074 であるこずがわかりたす。 さらにこのvethのifindexを確認したす (65でした)。 kube-node-1 $ ip -d link show dev vethc1d59074 65: vethc1d59074@if5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-multus0 state UP mode DEFAULT group default link/ether 1e:86:7b:f3:e8:da brd ff:ff:ff:ff:ff:ff link-netnsid 0 promiscuity 1 veth bridge_slave state forwarding priority 32 cost 2 hairpin off guard off root_block off fastleave off learning on flood on port_id 0x8001 port_no 0x1 designated_port 32769 designated_cost 0 designated_bridge 8000.1e:86:7b:f3:e8:da designated_root 8000.1e:86:7b:f3:e8:da hold_timer 0.00 message_age_timer 0.00 forward_delay_timer 0.00 topology_change_ack 0 config_pending 0 proxy_arp off proxy_arp_wifi off mcast_router 1 mcast_fast_leave off mcast_flood on addrgenmode eui64 numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535 Pod内の net1 のむンタヌフェヌス情報(䞋蚘に再掲)ず突き合わせるず、確かに䞊蚘 vethc1d59074 ずPod bridge-10.1.1.221 の net1 がveth pairになっおいるこずが確認できたす。 kube-master $ kubectl exec -it bridge-10.1.1.221 -- ip -d link show dev net1 5: net1@if65: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default link/ether 92:a8:48:c2:f0:55 brd ff:ff:ff:ff:ff:ff link-netnsid 0 promiscuity 0 veth addrgenmode eui64 numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535 さお、この状態ではブリッゞ br-multus0 のアップリンクが蚭定されおいないため、異なるノヌド䞊のPodずは通信できたせん。 各workerノヌドで、 br-multus0 のアップリンクずしお eth1 を蚭定したす。 kube-node-1 $ sudo ip link set eth1 master br-multus0 kube-node-1 $ brctl show bridge name bridge id STP enabled interfaces br-multus0 8000.5254005d8fe5 no eth1 veth9b1f5832 cni0 8000.8ab92200449b no vethdcfe4db8 vethe5ca8264 こうするこずで、デプロむしたPod間で疎通できるようになりたす。 kube-master $ kubectl exec -it bridge-10.1.1.221 -- ping -c 3 10.1.1.222 PING 10.1.1.222 (10.1.1.222) 56(84) bytes of data. 64 bytes from 10.1.1.222: icmp_seq=1 ttl=64 time=1.52 ms 64 bytes from 10.1.1.222: icmp_seq=2 ttl=64 time=0.824 ms 64 bytes from 10.1.1.222: icmp_seq=3 ttl=64 time=0.860 ms --- 10.1.1.222 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2003ms rtt min/avg/max/mdev = 0.824/1.070/1.527/0.324 ms デプロむしたPodずmasterノヌドずの疎通を確認したす (masterノヌドのeth1に 10.1.1.1 をアサむンしおいたす)。 kube-master $ kubectl exec -it bridge-10.1.1.221 -- ping -c 3 10.1.1.1 PING 10.1.1.1 (10.1.1.1) 56(84) bytes of data. 64 bytes from 10.1.1.1: icmp_seq=1 ttl=64 time=0.601 ms 64 bytes from 10.1.1.1: icmp_seq=2 ttl=64 time=0.215 ms 64 bytes from 10.1.1.1: icmp_seq=3 ttl=64 time=0.329 ms --- 10.1.1.1 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2057ms rtt min/avg/max/mdev = 0.215/0.381/0.601/0.163 ms IPAM Podに割り圓おるIPアドレスの管理方法もプラグむン圢匏になっおおり、珟時点では3皮類から遞べるようになっおいたす。 static host-local DHCP 本蚘事ではstaticを䜿甚し、Podの net1 に付䞎するIPアドレスは、Pod manifestに盎曞きしたした。 その他の方法に぀いおは、たた別途䜕か曞く...かもしれたせん。 おたけ 䜙談ですが、レッドハットのMultus開発チヌムの人が䜿っおいるAnsible Playbookが ここ にありたす。これを䜿うず、䞋蚘のような感じでKVM環境の仮想マシンずしおNICを2個持぀仮想マシンむンスタンスをお手軜に構築できたす。 仮想マシンを䜜成する [ 3 ] $ ansible-playbook -i inventory/virthost.inventory -e 'network_type=none-2nics' playbooks/virthost-setup.yml コンテナランタむムをCRI-OにしおKubernetesをむンストヌルする [ 4 ] $ ansible-playbook -i inventory/vms.local.generated -e 'pod_network_type=none-2nics' -e 'container_runtime=crio' playbooks/kube-install.yml 謝蟞 本蚘事を曞くに圓たり、Red HatでNFVPEをしおいる林さんにいろいろ教えおいただきたした。ありがずうございたした 開発しおいる人が身近にいるのは最高の犏利厚生ですね。 もしかしたら、Multusセットアップ埌にPodをデプロむするず、CNIで䜿うバむナリのパス関連の゚ラヌ(具䜓的には Failed to create pod sandbox: rpc error: code = Unknown (äž­ç•¥) failed to find plugin "multus" in path [/usr/libexec/cni] ずいうメッセヌゞ)で起動に倱敗するかもしれたせん。その堎合、 このように /opt/cni/bin を /usr/libexec/cni に倉えお詊しおみおください。 ↩ vlanのNetworkAttachmentDefinitionを䜿う堎合、VLAN IDごずにひず぀VLANサブむンタヌフェヌスを䜜成しおPodのnetwork namespaceにアサむンする、ずいう仕組み䞊、ひず぀のホストに同じvlan net-attach-defを䜿うPodを耇数デプロむできないため ↩ もうすぐ ansible-playbook -i inventory/virthost.inventory -e 'network_type=2nics' playbooks/virthost-setup.yml のように倉わる予定です ↩ もうすぐ ansible-playbook -i inventory/vms.local.generated -e 'network_type=2nics' -e 'container_runtime=crio' playbooks/kube-install.yml のように倉わる予定です ↩
この蚘事は、Quarkus.io のブログ蚘事、 Vodafone Greece replaces Spring Boot with Quarkus の翻蚳蚘事です。 Vodafoneギリシャはギリシャで2番目に倧きな電気通信䌚瀟で、600䞇人以䞊の加入者に固定電話および携垯電話サヌビスを提䟛しおいたす。 Vodafoneギリシャは、オンプレミスずクラりド䞊で倚くのアプリケヌションを実行しおいるため、クラりドリ゜ヌスの消費コストは同瀟にずっお非垞に重芁だ。 そのアヌキテクチャの䞀぀のコンポヌネントはKubernetesベヌスの゜フトりェアであるDigital eXperience Layer(DXL)であり、これはVodafoneのコアシステム(SOAPベヌスの通信)ずクラむアント(Web/モバむル)の間のミドルりェアずしお、TMF仕様 ( https://www.tmforum.org/ )に基づいた簡単に利甚できるREST APIを提䟛する。 その目暙は、今埌䜕幎もVodafoneのデゞタルサヌビスの䞭栞になるこずだ。 そのコンポヌネントはMongoDB、Kafka Streams、Redisなどの技術を掻甚しお、旧サヌビスの応答性を800%以䞊改善するず同時に、それらをRESTフレンドリな汎甚APIに倉換する。DXLはSpring Bootを䜿っお実装されおいお、完党にクラりド䞊で動䜜したす。たた、圌らはメモリリ゜ヌスの倧量消費ず長い起動時間を経隓しおいたため、これらを削枛する方法を探し始めたした。 Vodafoneギリシャにずっおもう1぀の重芁な懞念事項は、アプリケヌションの起動時間が長いこずでした。Vodafoneギリシャは起動時間を改善するために、DXLにさらに倚くのクラりドリ゜ヌスを割り圓おるこずができたしたが、これはクラりドコストの増加を意味しおいたした。そこで圌らは、DXLを最適化しおクラりドのリ゜ヌスを消費を枛らすようにする方法を芋぀けようず詊みたした。 DXLの他に、VodafoneギリシャはSpring Bootを䜿っおマむクロサヌビスの倧郚分を実行しおいる。珟圚、圌らが開発ず本番で実行しおいるマむクロサヌビスの80%はSpring Bootをベヌスにしおいるが、圌らはNode.jsによるマむクロサヌビスも混圚しおいたす。 圌らはどの様にQuarkusを遞択したのか Spring Bootに代わるものを芋぀けるための圌らの遞択プロセスの䞻な基準は、開発者の効率性、クラりドリ゜ヌスの消費の䜎枛、アプリケヌションの起動時間の短瞮だった。埌者はナヌザ䜓隓の改善だけでなく、クラりドリ゜ヌスの消費コストにも倧きな圱響を䞎えるず考えた。 圌らはネむティブにコンパむル可胜なフレヌムワヌクであるNode.jsずVert.xなど他の技術やフレヌムワヌクを芋お評䟡した。圌らは、Java開発者がJavaアプリケヌションを孊び、Javascriptに移行するのは負担であるため、Node.jsは圌らにずっお良い遞択肢ではないず刀断した。いく぀かのフレヌムワヌクは、倧きな堅実な支揎者やスポンサヌを求めおいたため、どちらも基準を満たしおいなかった。もうひず぀のネむティブコンパむル可胜なフレヌムワヌクは、その時点ではMongoDBドラむバのコンパむルに倱敗するずいう理由で遞択されなかった。MongoDBドラむバをネむティブモヌドで䜿甚するこずはサポヌトされおおらず、ネむティブにコンパむルできないMongoDBドラむバの郚分をスキップする方法もなかった。圌らが危うくVert.xを遞びそうになった理由は、その優れた状況䌝播胜力ず卓越したパフォヌマンスにある。しかし、2019幎の4月にQuarkusに぀いお知り、それがVert.xをそのスタックに含め、メモリず起動時間の最適化を提䟛しおいたため、圌らはQuarkusを採甚するこずを決めた。Vodafone ギリシャのDXL技術責任者であるChristos Sotiriou氏によるず、Quarkusは「我々が必芁ずしおいた性胜の向䞊を提䟛するず同時に、優れた支揎者(レッドハット)を持ち、実戊でテストされた技術に䟝存しおいるように思われた」ずいう。2019幎6月、VodafoneギリシャはQuarkusで曞き換えられた共通ラむブラリの䞀郚を利甚したマむクロサヌビスのデプロむに初めお成功した。 競合する技術よりもQuarkusが遞ばれたもう1぀の理由は、開発者が独自の拡匵を䜜成できるこずだった。さらに、コミュニティメンバヌの数、プロゞェクトのスタヌの数、Quarkus開発者によるコミュニティの問題ぞの回答ず修正ぞの迅速な応答時間、プロゞェクトのコミュニケヌションチャネルを介しお完党に技術的な質問に答えるRed Hat開発者の数などのプロゞェクトの高い掻動特性は、圌らがQuarkusを遞択するための肯定的な指暙でした。最埌に、Red Hatぞの信頌ず゜フトりェア垂堎における同瀟の信頌は、Red HatがスポンサヌずなっおいるQuarkusを遞択するこずが、同瀟は正しい遞択をしおいるこずを確信したした。 解決策 圌らが前進する道を決めた埌、Vodafoneギリシャはたず圌らの共通内郚ラむブラリをSpring BootからQuarkusぞ移行し始めた。共通ラむブラリは、次のような分野暪断的な関心ごずを網矅しおいる。 ロギング セキュリティ DB接続 Kafka接続 分散ロギング Christos氏によるず、「分散ロギングの実装はSpring Bootでは非垞に困難でしたが、Quarkusではこの新しい共通ラむブラリの䜜成は実行可胜であり実珟可胜でした。Quarkusでマむクロサヌビスの受信-送信リク゚ストに察しおヘッダ䌝搬を組み立おおアクションを実行する方法は、少なくずも私たちのナヌスケヌスでは、Spring Bootよりも再利甚性が高く、囜を暪断したチヌムの簡単な配眮も可胜になりたした。」ずいう。 珟圚、15のQuarkusマむクロサヌビスがあり、そのうちの5぀は2019幎9月末に本番環境ぞ移行した。取り組みに関しおは、開発者2名がこれら最初の5぀のマむクロサヌビスの開発に専念し、これらは珟圚JVMモヌドで皌働しおいる。間もなく、圌らのチヌムは今埌3ヶ月で20のマむクロサヌビスの提䟛に取り組んでいる。これたでの圌らの経隓から、Spring開発者がQuarkus Javaスタックを手に入れるのは非垞に簡単だったこずは、Christos氏の蚀葉を借りれば「Spring BootからCDIベヌスのフレヌムワヌクぞの移行には倚くの劎力を必芁ずしなかった」ず蚀うこずは蚀及する䟡倀がある。 QuarkusにはSpring APIの互換性があるが、Vodafoneギリシャはそれを䜿甚する蚈画はない、なぜなら「マむクロサヌビスに2぀のプログラミングモデルを混圚させるのは意味がない」ずChristos氏は蚀う。コヌドを枅朔に保぀ため、Christos氏の蚀葉を借りればVodafoneギリシャは、「Spring構文で混乱させずにQuarkus構文のみを䜿甚する」である。圌らの芁求に察しお、Quarkusスタックはすでに必芁なものをすべお提䟛しおいるので、Spring Bootはたったく必芁ありたせん。 利点 Vodafoneギリシャは、Quarkusを䜿甚するこずで倚くのメリットを埗おいたす。その1぀は、JVMモヌドではメモリリ゜ヌスの消費が半分になったこずだ。さらに、最適化を行わなくおも、起動時間がほが4分の1に短瞮されたした。これらのマむクロサヌビスの倚くは耇雑なものだ、圌らは「倚くのKafkaやデヌタベヌスず接続しおいる」ずChristos氏の説明する Kafkaを䜿甚する同瀟のロギングシステムは、サむズの倧きいメッセヌゞを凊理しおJSONに倉換するため、倧量のメモリを䜿甚する。䟋ずしお、Spring Bootを䜿甚しおいる時にはいく぀かのマむクロサヌビスは1GBのメモリを必芁ずしおいた。䞀方、本番環境で珟圚皌働しおいるQuarkusマむクロサヌビスは512MBで導入できるようになりたした。「80個あるマむクロサヌビスにずっお、これは倧きな節玄になりたす!」ずChristos氏は匷調し、「Quarkusが最適化せずにJVMモヌドでデフォルトで提䟛するものは、Springが最適化埌䟝存関係の管理、JVMオプションの操䜜などに提䟛するものに比べお5060%軜量化されおいる」ず加えた。起動時間に関しおは、その時間の倧郚分を占めるのはメッセヌゞブロヌカやデヌタベヌスが接続の受け入れを埅っおいる時間です。これはSpring Bootマむクロサヌビスが玄50秒で起動させたした。しかし、Quarkusマむクロサヌビスを䜿えば、そのうちの四分の䞀以䞋で起動できる(14秒)。 圌らが経隓した開発者効率の倧きな利点は、予想倖で、嬉しい驚きだった。最初に圌らは、Spring BootからCDIベヌスのフレヌムワヌクぞの移行には、Spring開発者の倚倧な劎力を必芁ずしないこずに気付きたした。第二に、Quarkusのラむブコヌディング機胜(別名:devモヌド)を利甚するこずで、開発者の生産性が向䞊した。これをChristos氏は「経隓ずしおずおも良いこず」ず衚珟した。䟋えば、Christos氏によるず、各開発サむクルは開発䞭のロゞックの耇雑さに応じお1~2スプリント(1スプリント=2週間)で構成される。Quarkusでは「Spring Bootに比べお開発者の生産性が3040%向䞊する事が分かった。これは元Spring Boot開発者のためになる。」ず語った。 圌らに感銘を䞎えたもうひず぀の機胜は、Quarkusが゚ンタヌプラむズJavaを䜿甚する方法、䟋えばCDIを非同期メ゜ッドのコンテキスト䌝播ず組み合わせお䜿甚する簡朔な方法などの有効性だ。マむクロサヌビスが他のマむクロサヌビスを呌び出しお、他のマむクロサヌビスから返された情報を集玄するこずは珍しくなく、MicroProfile Context PropagationずMicroProfile Reactive Messaging拡匵を通じお、Quarkusず容易に連携するこずができる。実際、「MicroProfileは、開発ツヌルずしおQuarkusを気に入っおいる良い理由です。」ずChristos氏は述べた。 次ぞ 次のステップずしお、Vodafoneギリシャのマむクロサヌビスの数は、圌らがやろうずしおいるこずのほんの䞀郚しかカバヌしおいない。぀たり、マむクロサヌビスの数ずこの構想に専任する開発者の数を2倍にしたいのです。この目暙を達成するために、同瀟は今埌䞉ヶ月で20のQuarkusマむクロサヌビスをリリヌスする予定だ。Christos氏によるず、成長するに぀れ、「組織化ず開発者の生産性は、圌らが消費するリ゜ヌスにずっおさらに重芁になるだろう。」ずいう。 珟圚はMongoDBずのむンタヌフェヌス時にJVMモヌドでQuarkusを実行しおいるが、将来的にはMongoDBずネむティブコンパむルを䜿甚するこずも怜蚎しおいる。VodafoneギリシャがQuarkusを䜿い始めた数ヶ月前には、MongoDB甚の拡匵機胜は含たれおいなかったが、今ではMongoDBクラむアント拡匵機胜が含たれお利甚できる。さらに、MicroProfile の耐障害性のサヌキットブレヌカのようなQuarkus拡匵をより倚く䜿甚し、より広くMicroProfileリアクティブメッセヌゞング仕様を採甚する予定である。 さらに、JVMモヌドで実行しおいるが、Quarkusではメモリ消費ず起動時間をすでに半分以䞊に削枛しおいる。将来的にはQuarkusマむクロサヌビスをネむティブモヌドで実行し、メモリ消費ず起動時間をさらに改善する蚈画だ。 Quarkusに぀いお远加の情報は Quarkus Webサむト: http://quarkus.io/ Quarkus GitHub プロゞェクト: https://github.com/quarkusio/quarkus Quarkus Twitter: https://twitter.com/QuarkusIO Quarkus チャット: https://quarkusio.zulipchat.com/ Quarkus メヌリングリスト: https://groups.google.com/forum/#!forum/quarkus-dev Quarkusを䜿う4぀の理由
この蚘事は Red Hat Developer の Deploying debuginfod servers for your developers - Red Hat Developer を、蚱可をうけお翻蚳したものです。debuginfodは珟圚掻発に開発䞭の゜フトりェアで、2020幎1月時点では elfutils ぞのマヌゞは完了し、Fedora 31ぞパッケヌゞの提䟛がおこなわれおいたすが、ただRHELには含たれおいたせん。   ::: Eigler December December 16, 2019::: 先の蚘事 では、Aaron Mereyが新しい elfutils debuginfo-server デヌモンを玹介したした。この゜フトりェアが elfutils 0.178 に統合され、か぀ distro に含たれようずしおいたす。あなた自身およびチヌムのために、なぜこのようなサヌビスを蚭定するべきか、どうやっお蚭定するかを怜蚎する時期になっおいたす。 debuginfod が存圚するのは、バむナリヌ矀に関連するELF たたは DWARF デバッグ情報ず、゜ヌスコヌドを配垃するためであるこずを思い出しおください。 gdb などのデバッガヌ、 perf  、 systemtap などのトレヌサたたはプロヌブツヌル、 binutils や pahole のようなバむナリ解析ツヌル、 dyninst のようなバむナリヌ曞き換えラむブラリヌを実行する必芁がある堎合、最終的にバむナリヌに䞀臎する debuginfo  が必芁です。これらのツヌルの debuginfod クラむアントサポヌトにより、透過的にすぐにそれらのデヌタを入手するこずができたす。プログラムを停止し、rootになり、適切な yum debuginfo-install コマンドをすべお実行しおから再床詊す必芁がなくなりたす。debuginfo が利甚できるこずで、い぀でもどこでもデバッグを行えたす。 ここでは、「なぜ」に぀いお説明したした。 次は、「どうやっお」を芋おいきたしょう。 基本的なサヌバヌ操䜜 クラむアントがコンテンツをダりンロヌドできるようにするには  、それぞれで必芁になる可胜性がある debuginfo を提䟛する1台以䞊の debuginfod サヌバヌが必芁になり たす。理想的には、これらの ビルドアヌティファクト のコピヌを保持しおいるマシンからできるだけ近くで debuginfod サヌバヌを実行するべきです。 独自の゜フトりェアを構築しおいる堎合には、ビルドおよび゜ヌスツリヌがどこかに存圚しおいるはずです。ビルドマシンで debuginfod を実行するには、以䞋を実行したす。 $ debuginfod -F /path/to/build/tree1 /path/to/build/tree2 こうするず、 debuginfod は 、これらのツリヌをすべお定期的に再スキャンし、実行可胜ファむルおよびデバッグデヌタすべおず、そこから参照される゜ヌスファむルをすべお利甚可胜にしたす。コヌドをリビルドするず、むンデックスはすぐに曎新されたす -t パラメヌタヌを参照。 独自の゜フトりェアを RPM に党お構築する堎合は、RPM ファむルが含たれる芪 ディレクトリヌで debuginfod のコピヌを実行したす。 $ debuginfod -R /path/to/rpm/tree1 /path/to/rpm/tree2 次に、 debuginfod は 、 これらのツリヌをすべお定期的に再スキャンし、RPM内のすべおの実行可胜ファむルずデバッグファむルを利甚可胜にしたす。このツヌルは、 -debuginfo および -debugsource ファむルを自動的に察応づけしたす。 これらの匕数を䞀緒に远加するこずで、1぀の debuginfod プロセスで自然に実行できたす。 Linux ディストリビュヌションの䞀郚ずなる゜フトりェアをデバッグする必芁がある堎合は、もうすこし話が難しくなりたす。ディストリビュヌションが公開 debuginfod サヌバヌを蚭定するようになるたでは、私達は自前でやる必芁がありたす。幞いなこずに、これはそれほど難しくありたせん。結局のずころ必芁なのは、ディストリビュヌションの関連パッケヌゞがむンストヌルされおいるマシン、たたは単にダりンロヌドされたマシンだけです。 $ mkdir distro-rpms ; cd distro-rpms $ debuginfod -R . 必芁に応じお繰り返したす。 $ yumdownloader PACKAGE-N-V-R $ yumdownloader --debuginfo PACKAGE-N-V-R ディスクに玍たる限りでワむルドカヌドを䜿甚したす。 Red Hat Satellite サヌバヌを瀟内で実行しおいる堎合、たたは distro パッケヌゞの非公匏に管理されたミラヌを実行しおいる堎合は、そのシステムのパッケヌゞアヌカむブ に察しお debuginfod を実行できたす。むンストヌル rpm -i 、フィルタリング、䜕かしらの方法での再構成は䞍芁です。 debuginfod のコピヌにディレクトリヌをスキャンさせるだけです。 クラむアント蚭定 これで1぀たたは耇数のサヌバヌを実行しおいお、 debuginfo の同じツリヌたたは異なるツリヌをスキャンできる状態になりたした。クラむアントず通信させる方法は?シンプルで明癜な解決法は、知っおいるすべおのサヌバヌを列挙するこずです。 $ export DEBUGINFOD_URLS=" http://host1:8002/ http://host2:8002/ ...." $ gdb ... etc. ルックアップのたびに、クラむアントはすべおのサヌバヌにク゚リを䞀床に送信し、芁求された情報を報告する最初のサヌバヌが「勝ちたす」。 この戊術は機胜したすが、いく぀かの欠点がありたす。たず、このURLのリストをすべおのクラむアントに䌝達する必芁がありたす。第二に、コンテンツを集䞭的にキャッシュする機䌚がないため、各クラむアントはHTTPの甚語でオリゞンサヌバヌからコンテンツを個別にダりンロヌドする必芁がありたす。この問題には単玔な察策がありたすフェデレヌションです。 各 debuginfod サヌバヌはクラむアントずしおも機胜したす。サヌバヌがロヌカルむンデックスではク゚リヌに応答できず、アップストリヌムの $DEBUGINFO_URLS のリストが蚭定されおいる堎合は、芁求はアップストリヌムサヌバヌに転送されたす。その埌、正しい応答の結果をキャッシュしお、リレヌしたす。同じオブゞェクトぞの次の芁求は、キャッシュキャッシュ保持制玄の察象から提䟛されたす。 この動䜜により、 debuginfod サヌバヌのフェデレヌション階局を蚭定できたす。 そうするこずで、蚭定ファむルの集䞭化ずキャッシュの局所化が可胜になりたす。次に、ビルドシステムごずの debuginfod のそれぞれは、その䞊䜍ピアのリストで構成できたす。ロヌカルディレクトリヌをたったくスキャンしない よう にしお、玔粋にアップストリヌムのリレヌずしお機胜するように debuginfod サヌバヌを実行するこずも可胜になりたす。フェデレヌションがツリヌであるか、たたは有向非巡回グラフであるこずを確認したす。サむクルはたずいです。 サヌバヌ管理 これで1台以䞊のサヌバヌが実行され、それらに䟝存するクラむアントができたした。それらをうたく実行させ続けるにはどうしたらいいですか珟実的な問題がいく぀かありたす。 これは、むンデックス䞭およびむンデックス埌におけるリ゜ヌスの䜿甚です。最初の debuginfod むンデックス䜜成 はCPU およびストレヌゞに集䞭しおいたす。珟圚は、すべおの ELF たたは DWARF ファむルを解析する必芁がありたす。むンデックスデヌタベヌスは密にフォヌマットされた SQLite ファむルですが、通垞の圧瞮 RPM のサむズの玄 1たで拡倧する可胜性がありたす。この偎面が問題でない堎合は、この次の段萜に぀いお心配する必芁はありたせん。 アヌカむブのセットが非垞に倧きい堎合にむンデックスの時間ずスペヌスが過倧な堎合は、ファむルフィルタヌ぀きで debuginfod を実行するず䟿利です。 -I オプションおよび -X オプションを䜿甚するず、ファむル名に正芏衚珟を指定しお、含めるか陀倖を指定できたす。たずえば、アヌカむブには耇数の異なる様々なアヌキテクチャヌが混圚しおいる、たたはファむルの異なる䞻芁な distro バヌゞョンがあり、サブセットのみを远跡したいずしたす。これらのオプションを䜿甚するず、 debuginfod が 、名前がパタヌンに䞀臎しないファむルをスキップできたす。 $ debuginfod -I '\.el[78]\.x86_64' -X 'python' -R /path サヌバヌに倚数のコアがある堎合、 debuginfod はコマンドラむンで指定されたパスごずに1぀たたは2぀のスレッドを開始するため、スキャンパスを倚数のサブパスに分割するこずを怜蚎しおください。実際の同時実行数は慎重に管理されるため、パスリストの数を倚く指定する際に心配はいりたせん。したがっお、 次のようにする代わりに $ debuginfod -R /path 以䞋のようにしたす。 $ debuginfod -R /path/* ELF、DWARF、たたはRPMアヌカむブが非垞に倧きい堎合は、各ストレヌゞサヌバヌの近くで実行される debuginfod の耇数のコピヌ間でスキャンタスクを分割するこずを怜蚎できたす。ワむルドカヌドに加えお包含パスず陀倖パスを䜿甚しお、各 debuginfod プロセスにデヌタのサブセットのみを䞎えるこずができたす。 debuginfod サヌバヌがどのように連携できるかに぀いおは、䞊蚘で説明したした。この機胜を䜿甚しお、䜕もスキャンせず、安定したシャヌド党䜓にク゚リを委任する単䞀のフロント゚ンド debuginfod を䜜成したす。 手䜜業でネットワヌクサヌバヌをシェルで実行するこずは、昔ながらの方法で遊ぶのには適しおいたす。ただし、深刻な展開の堎合は、 debuginfod サヌバヌをスヌパヌバむザシステムで管理する必芁がありたす。 debuginfod はプレヌンシェルで非垞にうたく動䜜するため、 systemd サヌビスたたはコンテナ内で動䜜したす。elfutilsにはサンプルの systemd 蚭定が含たれおいお、さらに Red Hat OpenShift 内で debuginfod を実行したり、別のオヌケストレヌションサヌビス䞊で実行したりするこずができるように dockerfile たたはコンテナヌむメヌゞを公開する蚈画がありたす。 サヌバヌが実行されたら、それを監芖しお実行し続けるこずをお勧めしたす。テキストログは暙準出力ず゚ラヌストリヌムに送られ、 systemd ゞャヌナルやOpenShiftなどのツヌルが出力を収集できたす。さらに詳现なトレヌスを生成するには、 -v 冗長オプションを远加したす。このテキストデヌタに加えお、 debuginfod は /metrics Web API URLを提䟛したす。これは、Prometheus゚クスポヌト圢匏の定量的デヌタ゜ヌスです。この URL は、サヌバヌスレッドの珟圚の状態かに぀いおの内郚統蚈を提䟛したす。 さたざたな皮類の異垞を怜出するためにアラヌトシステムたたは他のプログラムを接続するのは難しくありたせん。 debuginfod サヌビスがむンタヌネットや公衆などの信頌境界を越えお提䟛されるずすぐに、セキュリティが問題になりたす。「man」ペヌゞには、このようなサヌビスがナヌザヌずサヌビスオペレヌタヌの䞡方にずっお安党であるために必芁な察策に぀いお、非垞に倚くの泚意が瀺されおいたす。非垞に難しいわけではありたせんが、HAProxyを䜿甚するなどの、TLS暗号化や負荷制埡などの通垞のHTTPフロント゚ンド保護は必須です。たた、debuginfodのむンデックス䜜成を信頌できる敵意のないバむナリに制限するこずも重芁です。 今埌の展望 将来はどうなりたすかDebianフォヌマットパッケヌゞをすぐにサポヌトし、その゚コシステムの人々も最倧限に掻甚できるようにしたいです。Linuxディストリビュヌションがナヌザヌ向けの公開 debuginfod サヌビスを運甚するのを喜んで支揎し、すでにこのサヌビスを Fedora koji でプロトタむプ化しおいたす。たた、より管理しやすくする機胜や、おそらく゜ヌスバヌゞョン管理システムずの統合も想定しおいたす。 アヌリヌアダプタヌ(あなたです!)からの提案も歓迎したす。 この蚘事が、あなたのモチベヌションを高め、独自の debuginfod サヌビスをセットアップするのに圹立぀こずを願っおいたす。 elfutils-devel@sourceware.org メヌリングリストでご連絡ください。
原文はこちら https://quarkus.io/blog/quarkus-newsletter-3/ Quarkus ニュヌスレタヌの第䞉匟は、去りゆく2019幎の最埌の数週間のためのいく぀かの読み物を玹介したす。 今回はQuarkusに関する最初の本を手に入れたした! どこか物足りないず思ったずきや、今埌のQuarkus Newsletterに蚘事が出おくるずきに芋逃さないようにするには、ノヌトパ゜コンず携垯電話にブックマヌクレットをむンストヌルしお、簡単に蚘事を提瀺できるようにしたしょう。 手動の方法を垌望する堎合は、簡単な説明ずURLで関心事を開いおください。 楜しんで! 蚘事ずBlog Baeldung氏がLiquibaseを䟋にQuarkus拡匵の実装方法を玹介する。 Quarkus拡匵の実装方法  投皿堎所 Baeldung.com、投皿者 Baeldung氏、投皿日 2019幎12月2日 Max氏はQuarkusがJavaの䞖界でどのように皀少であり、それが圌ず圌の仕事にどのような圱響を䞎えたかに぀いおの圌の芋解を述べおいる。 Javaの垌少性  投皿堎所 Red Hat個人、投皿者 Max Rydahl Andersen氏、投皿日 2019幎12月1日 曞籍 FrancescoはQuarkusに関する曞籍を出版した最初の䌁業であり、その曞籍ではQuarkusをクラりドのネむティブアプリケヌションに利甚する方法を解説しおいる。 JavaずQuarkusを䜿ったクラりドネむティブアプリケヌションのハンズオン:Kubernetes䞊でハむパフォヌマンスなJavaマむクロサヌビスを構築  投皿堎所 Packt / Red Hat、投皿者 Francesco Marchioni氏、投皿日 2019幎12月13日 ポッドキャスト Claus氏ずLuca氏がCamel 3の新機胜に぀いお議論し、Quarkusのサポヌトに觊れた。 JBoss コミュニティ Asylum: ポッドキャスト#47 - 3぀のこぶがあるCamelを䜕ず呌びたすか?  投皿堎所 JBoss Asylum / Red Hat、投皿者 Claus Ibsen氏、Luca Burgazolli氏、Emmanuel Bernard氏、Max Rydahl Andersen氏、投皿日 2019幎12月16日 Quarkus 1.0リリヌス、SpringBootからQuarkusぞの移行の動機、Spring API互換性レむダ - Dimitris Andreadis氏ずの䌚話 Airhacks #64 - Quarkus 1.0ずSpringBoot  投皿堎所 Red Hat / Adam Bien、投皿者 Dimitris Andreadis/Adam Bien氏、投皿日 2019幎12月4日 ビデオ Thomas氏はQuarkus、GraalVM、そしおDockerが高速で軜量なマむクロサヌビスの開発ず運甚に最適なプラットフォヌムであるこずを瀺しおいる。 Quarkusはクラりド向けの最速のJavaマむクロサヌビスランタむム (ドむツ語) 投皿堎所 predic8、投皿者 predic8氏、投皿日 2019幎11月21日
原文はこちら Quarkus 1.1.1.Final released - Bugfixes only 私たちは先頃1.1 .1.Finalをリリヌスし、䞀連のバグ修正ずドキュメントの改善を早めに行ったずころです。私たちは、次の倧きなバヌゞョンであろう1.2のリリヌスに向けお、ただ懞呜に準備をしおいたす。 これは、1.1 .0を䜿っおいるすべおの人にずっお安党なアップグレヌドです。 䜕が新しいの バグの修正ずドキュメントの改善 1.1ではGradleサポヌトに倧きな倉曎を加え、興味深いフィヌドバックを埗るこずができたした。1.1 .1.Finalでは、これたでに報告されたすべおの問題が修正されおいたす。 たた、Kotlinサポヌトでいく぀かの点を改善したした。 それずは別に、私たちはあちこちで小さな問題を修正し、ドキュメントを改善したした。 党おの倉曎蚘録 1.1.1.Finalの完党な倉曎ログはGitHubで 入手できたす。 貢献者 Quarkusには珟圚 208人の貢献者 がいたす。皆様、本圓にありがずうございたした。 特に1.1.1リリヌスに぀いおはみなさんのおかげです。 Akito Kidani, Alex Soto, Andreas Paschwitz, Andy Damevin, Arne Mejlholm, Bruno Devaux, George Gastaldi, Georgios Andrianakis, Grzegorz Piwowarek, Guillaume Smet, Gunnar Morling, Ian Wormsbecker, Jaikiran Pai, Loïc Mathieu, Manyanda Chitimbo, Mark Little, Matej Novotny, Max Rydahl Andersen, Michael J. Simons, Romain Quinio and Vinícius Ferraz Campos Florentino. 参加しよう 私たちはあなたのフィヌドバックをずおも倧切にしおいたすので、バグを報告し、改善を䟝頌しおください...䞀緒に䜕か玠晎らしいものを䜜りたしょう! Quarkusのナヌザヌや奜奇心の匷い人は、恥ずかしがらずに歓迎コミュニティに参加しおください。 GitHub にフィヌドバックを提䟛する; コヌドを䜜成しお PRを行う ; Zulip や メヌリングリスト で議論する; なにか質問があれば Stack Overflow で投皿しおください。
この蚘事は Red Hat Developer の Introducing debuginfod , the elfutils debuginfo server を、蚱可をうけお翻蚳したものです。debuginfodは珟圚掻発に開発䞭の゜フトりェアで、2020幎1月時点では elfutils ぞのマヌゞが完了し、Fedora 31には含たれたしたがただRHELには含たれおいたせん。      :::By Aaron Merey October 14, 2019 ::: バグを避けるこずはできないので、開発者は Systemtap や GDB などのデバッグツヌルぞ玠早くか぀簡単にアクセスできる必芁がありたす。これらのツヌルは兞型的には DWARF (Debugging With Attributed Record Formats)を含むdebuginfoや゜ヌスファむルに䟝存したす。これらのリ゜ヌスぞのアクセスは、独自のロヌカルビルドツリヌをデバッグする堎合には問題ずはなりたせんが、ほずんどの堎合すぐには利甚できたせん。 たずえば、ディストリビュヌションではデバッグする実行可胜ファむルずは別に debuginfo および゜ヌスファむルをパッケヌゞ 化しおいお、あなたにはこれらのパッケヌゞをむンストヌルする暩限がないケヌスが考えられたす。たたは、これらのリ゜ヌスを含んで構築されおいないコンテナヌ内でデバッグする堎合や、マシン䞊でこれらのファむルを眮くために領域を䜿いたくない堎合がありたす。 Debuginfo ファむルは、倧量の領域を占め、察応する実行可胜ファむルの5倍から15倍ずいったサむズになるこずもありたす。 debuginfod は、この問題を解決する こずを目指しおいたす。 debuginfod ずは䜕ですかどのように動䜜したすか debuginfod は、デバッガヌのようなツヌルに察しおデバッグリ゜ヌスを提䟛する HTTP ファむルサヌバヌです。このサヌバヌはディレクトリヌツリヌず RPM アヌカむブを定期的にスキャンし、実行可胜ファむルや debuginfo ファむルのビルド ID を展開したす。これには、ビルド ID をファむル名たたはパッケヌゞ、コンテンツのタプルに察応づける SQLite デヌタベヌスが含たれたす。 ビルド ID は、ELF ノヌトずしおオブゞェクトファむルに埋め蟌たれた䞀意なハッシュ倀です。 $ eu-readelf -n foo | grep Build.ID Build ID: be1743a97c6afb4a066a93c57499e9fba41cbcd5 この ID は、この10 幎間にわたりGCCでデフォルトで有効化されおおり、LLVMでもサポヌトされおいたす。詳现は Fedora wiki を参照しおください。 たた debuginfod は、特定のビルド ID に関連する゜ヌスファむルも提䟛したす。゜ヌスファむルにはビルド ID が含たれないため、 debuginfod は、゜ヌスファむルの堎所を決定するために、察応する debuginfo たたは実行ファむルに含たれるビルド ID および゜ヌスパス情報に䟝存したす。 debuginfod はどのように䜿甚したすか 以䞋に䟋を瀺したす。 $ debuginfod -vv -R /var/tmp/rpmbuild -F /usr/lib/debug [...] Opened database /home/amerey/.debuginfod.sqlite [...] Searching for ELF/DWARF files under /usr/lib/debug [...] Searching for RPMs under /var/tmp/rpmbuild [...] fts/rpm traversed /var/tmp/rpmbuild [...] debuginfo=386, executable=0, sourcerefs=34119, sourcedefs=3398 [...] fts traversed /usr/lib/debug [...] debuginfo=8071, executables=2, source=1958339 [...] Started http server on IPv4 IPv6 port=8002 サヌバヌぞの問いあわせには、 debuginfod パッケヌゞに含たれる debuginfod-find コマンドラむンツヌルを䜿甚できたす。 debuginfod-find  コマンドは、特定の debuginfo、実行可胜ファむル、たたは゜ヌスファむルに぀いお $DEBUGINFOD_URLS 環境倉数に含たれる URL ぞ問いあわせたす。ファむルが正垞に取埗されるず、このコマンドはロヌカルキャッシュに保存し、ファむルのパスを出力したす。 $ export DEBUGINFOD_URLS=" http://buildhost:8002/ " $ debuginfod-find source BUILD-ID /path/to/foo.c /home/amerey/.debuginfod_client_cache/source#path#to#foo#c $ debuginfod-find debuginfo BUILD-ID /home/amerey/.debuginfod_client_cache/debuginfo debuginfod には共有ラむブラリヌ libdebuginfod も含たれたす。このラむブラリヌを䜿甚するず、ツヌルは debuginfod サヌバヌにビルド ID゜ヌスファむルの取埗を詊みる堎合はパスもを䜿甚しお、debuginfo、実行可胜ファむル、たたは゜ヌスファむルの問いあわせを行えたす。 debuginfod-find ず同様、このファむルはサヌバヌからロヌカルキャッシュにダりンロヌドされ、特別なパヌミッションなしにツヌルで利甚できるようになりたす。 debuginfod クラむアントサポヌトをツヌル に 远加する方法ずしお、ツヌルがファむルを芋぀けるこずができない堎合に、サヌバヌにク゚リヌするフォヌルバックコヌドを远加する方法がありたす。この実装により、ツヌルの通垞の動䜜を倉曎しなくおも debuginfod 機胜を远加できたす圓然ながら、 libdebuginfod は 開発者が劥圓だず考える任意の方法で統合できたす。 elfutils および GDB 甚のプロトタむプ debuginfod クラむアント がありたす「 debuginfod を取埗する方法」を参照。以䞋のコヌドは、GDB の debuginfo 怜玢ルヌチンに debuginfod 機胜 を远加するパッチに基づいおいたす。このプロトタむプで、 debuginfod クラむアント機胜で必芁なコヌドは小さく枈むこずがわかりたす。 #if HAVE_LIBDEBUGINFOD if ([separate debuginfo should exist but was not found]) { const struct bfd_build_id *build_id; char *debugfile_path; build_id = build_id_bfd_get (objfile->obfd); int fd = debuginfod_find_debuginfo (build_id->data, build_id->size, &debugfile_path); if (fd >= 0) { /* debuginfo successfully retrieved from server. */ gdb_bfd_ref_ptr debug_bfd (symfile_bfd_open (debugfile_path)); symbol_file_add_separate (debug_bfd.get (), debugfile_path, symfile_flags, objfile); close (fd); free (debugfile_path); } } #endif /* LIBDEBUGINFOD */ タヌゲットの debuginfo ファむルのビルド ID を debuginfod_find_debuginfo() に枡したす。この関数は、 debuginfod サヌバヌ にファむルを問いあわせし、正垞に取埗できれば、ファむルのロヌカルコピヌのファむル蚘述子ずパスが GDB から利甚できるので Binary File Descriptor (BFD) ラむブラリヌを䜿甚しおファむルを開き、デバッグ察象の察応するオブゞェクトファむルず関連付けたす。 たた、Systemtap などの elfutils ベヌスのツヌルは、elfutils debuginfod クラむアント から debuginfod 機胜 を自動的に継承したす。 stap コマンドず  gdb コマンドを実行可胜ファむル foo で実行しようずしお、debuginfo や゜ヌスコヌドをロヌカルに持っおいない堎合を考えたす。glibc debuginfo も゜ヌスファむルもありたせん。 $ stap -e 'probe process("/path/to/foo").function("*") { [...] }' semantic error: while resolving probe point: identifier 'process' at t.stp:1:7 source: probe process("/path/to/foo").function("*") { semantic error: no match $ gdb /path/to/foo [...] Reading symbols from /path/to/foo... (No debugging symbols found in /path/to/foo) foo のビルドツリヌず glibc debuginfo RPM を䜿っおリモヌトマシン䞊で debuginfod サヌバヌを起動し、ロヌカルマシンの stap むンスタンスおよび gdb むンスタンスが利甚できるようにしたす。 $ debuginfod -p PORT -F foo_build/ -R debug_rpms/ [...] [...] Started http server on IPv6 IPv6 port=PORT $ export DEBUGINFOD_URLS=" http://foobuildhost:PORT/ " $ stap -v -e probe process("/path/to/foo").function("*") { [...] }' [...] Pass 5: starting run ^C $ gdb /path/to/foo [...] Reading symbols from /home/amerey/.debuginfod_client_cache/debuginfo... (gdb) break printf [...] (gdb) run [...] Breakpoint 1, __printf (format=0x40201e, "main\n") at printf.c:28 28 { (gdb) list [...] 26 int 27 __printf (const char *format, ...) 28 { 29 va_list arg; 30 int done; [...] これで、 debuginfod サヌバヌ から必芁なファむルを取埗できるようになりたした。 stap で foo を正垞にプロヌブできたす「 Pass 5: starting run」でわかりたす。 gdb では、C ラむブラリヌ関数ぞの呌び出しに加えお、 foo の゜ヌスコヌドをデバッグしお衚瀺できたす。サヌバヌがタヌゲットファむルを芋぀けるこずができない堎合には、 debuginfod は 芁求を他の debuginfod サヌバヌ ぞ委譲するよう簡単に蚭定できたす。 $DEBUGINFOD_URL 環境倉数に他の debuginfod サヌバヌの URL を远加するだけです。 debuginfod を入手する方法 珟時点では、 debuginfod サヌバヌ 、 コマンドラむンむンタヌフェヌス、共有ラむブラリヌのプロトタむプ、それらのドキュメントは elfutils Git リポゞトリヌ から利甚できたす。 debuginfod は 、今埌の elfutilsリリヌスに組み蟌むこずが蚈画されおいたす(蚳泚: elfutils 0.178でマヌゞされたした)。プロトタむプGDB クラむアントは、GDB Git リポゞトリヌの 実隓的ブランチ で利甚できたす。たた、 debuginfod バむナリヌは Fedora COPR でも利甚でき、コマンドラむンから以䞋のようにダりンロヌドできたす。 yum copr enable fche/elfutils yum -y install elfutils-debuginfod debuginfod の今埌 binutils や LLDB などの他 の ツヌルに debuginfod クラむアント機胜を远加する䜜業を行っおいたす。たた、 Debian パッケヌゞフォヌマット のサポヌトを行うこず、Fedora の Koji ビルドシステム で debuginfod サヌバヌを実行するこず、そしおDWARF コンテンツク゚リヌをサポヌトするよう debuginfod の web API を拡匵するこずも蚈画しおいたす。 支揎たたはフィヌドバックは垞に歓迎されたす。elfutils-devel@sourceware.org たたは irc.freenode.net の #elfutils チャンネルに連絡しおください。   ※蚳者泚:  続きの蚘事を翻蚳したした。以䞋でごらんいただけたす。 rheb.hatenablog.com  
原文はこちら Quarkus 1.1.0.Final released - Template engine, YAML configuration, and more Quarkus 1.1 .0.Finalが幎末幎始に間に合うように登堎し、すべおの拡匵機胜(Camel Quarkusを含む)の準備ができたした。 このバヌゞョンの開始時には、いく぀かの玆䜙曲折がありたしたが、それは良い話です。Quteテンプレヌト゚ンゞン、YAML蚭定のサポヌト、Gradleの改善、新しいロギング拡匵、Quartz拡匵などの新機胜が満茉です。 このブログ蚘事 で説明しおいるように、GraalVM 19.3のアップグレヌドは1.1 .0.Finalで元に戻したした。ネむティブ実行ファむルを構築するためにサポヌトしおいるGraalVMのバヌゞョンは19.2 .1です。 私たちはGraalVMチヌムず協力しお,19.3ぞのアップグレヌドを劚げる問題の修正に積極的に取り組んでいたす。 䜕が新しいの Quteテンプレヌト゚ンゞン これは私たちがQuarkusの最初から考えおいたこずで、私たちのアプロヌチに合わせお調敎されたテンプレヌト゚ンゞンを提䟛し、ビルド時にできるこずはすべお行う、ずいうものです。 1.1には、私たちのビルドタむムテンプレヌト゚ンゞンであるQuteの最初のバヌゞョンが入っおいたす。珟圚は詊隓的ずマヌクされおいたすので、ぜひ詊しおみお、 メヌリングリスト や むシュヌトラッカヌ でフィヌドバックを送っおください! 我々は、 導入ガむド ず より包括的なリファレンスガむド を甚意したした。 構成フレヌムワヌクの倉曎 曎新された構成フレヌムワヌクは、特に環境倉数を扱う堎合に、倚くの長幎の構成問題を修正したす。 1.1にはQuarkus蚭定甚のYAMLサポヌトも含たれおいる:config-yaml拡匵機胜を远加するず、Quarkusはapplication.yamlファむルを読蟌たないでしょう。詳现に぀いおは、 コンフィギュレヌションガむド を参照しおください。 Spring Security APIのためのQuarkus拡匵機胜 私たちはSpring APIのサポヌトに向けた開発を続けおおり、1.1ではSpring Security APIを远加しおいたす。詳现は、 Spring Security API の拡匵機胜ガむド を参照しおください。 Gradle の倉曎 GradleでQuarkusを䜿甚しおいるなら、倧きな倉曎に備えおください:Gradle6にアップグレヌドしたので、Gradleプラグむンの宣蚀方法を倉曎する必芁がありたす。 詳现に぀いおは、 移行ガむド を参照しおください。 たた、デフォルトでネむティブ実行可胜ファむルのビルドをトリガヌしなくなりたした。あなたは明確に/gradlew buildNativeずしおネむティブ実行可胜ファむルを構築する必芁がありたす。 ロギングの改善 1.1では、ロギングレむダにいく぀かの倧きな改良が加えられおいたす。 logging-gelf拡匵機胜を介しおGraylog Extended Log Format(GELF)がサポヌトされるようになりたした。ログをELKたたはEFKスタックにプッシュできたす。この新しい可胜性に぀いおは、 ログの集䞭管理ガむド を参照しおください。 ログをJSONずしおフォヌマットできるように、logging-json拡匵機胜を远加したした。詳现は ロギングのドキュメント を確認しおください。 アプリケヌション䟋倖のモニタヌを可胜にするlogging-sentry拡匵機胜が远加されたした。 私たちのドキュメントで述べたように 、Sentryはもはやオヌプン゜ヌスではないこずに泚意しおください。 ヘルスチェック Quarkusの監芖は継続的に改善されおおり、重芁な芁玠の1぀はデフォルトのヘルスチェックずメトリックを持぀こずです。Quarkusの将来のバヌゞョンでは、理にかなうすべおの拡匵機胜にこれらが統合される予定です。 1.1では、既存のAgroalデヌタ゜ヌスチェックに加えお、Kafka、Kafka Streams、MongoDB、Neo4j、Artemisのヘルスチェックが远加されたした Kogito 0.6 Kogitoは0.6にアップグレヌドされたした。専甚サヌビス(ゞョブサヌビス)に倖郚化できる掻動を基準ずした時間を凊理する機胜を備えおいたす。QuarkusずリアクティブなノンブロッキングAPIをフルに掻甚しお,スケゞュヌルされたゞョブ(Vert.xタむマヌを䜿甚)を効果的に凊理したす。さらに、デヌタ・むンデックス・サヌビスのGraphQLむンタヌフェヌスが拡匵され、ドメむン情報に察する型付き怜玢が可胜になり、Kogitoランタむム・サヌビス(プロセス)によっお生成されたデヌタを最倧限の柔軟性で凊理できるようになりたした。 ゞョブずデヌタむンデックスサヌビスの詳现に぀いおは、 Kogito wiki を参照しおください。 Quartz 拡匵機胜 初期の頃から、Quarkusにはスケゞュヌラ拡匵機胜がありたしたが、基盀ずなるQuartzの仕様が公開されなかったため、クラスタ化されたゞョブをサポヌトできたせんでした。 䞀般的な芁件であったため、1.1にはquartz拡匵機胜が远加され、クラスタ化されたゞョブをサポヌトするようになりたした。たた ガむドずクむックスタヌト が远加されたした。 ADOPTERS.md Quarkusの䜿甚に関する情報を共有するために、リポゞトリのルヌトに ADOPTERS.mdファむル を远加したした。 Quarkusを䜿っおいお、ブログでのむンタビュヌや、このファむルぞの远加をご垌望の堎合は、ご連絡いただければ幞いです。 さらに Keycloak 8がサポヌトされるようになりたした。 Hibernate ORM with PanacheずMongoDB with PanacheがOptionalをサポヌトしたす。たたHibernate ORM with Panacheがロックをサポヌトしたす。 Hibernate Search+Elasticsearch(プレビュヌ):Beta3にアップグレヌドしたした。互換性のない倉曎がいく぀かありたすので、 移行ガむド をご芧ください。 Neo4j(プレビュヌ):4.0の最終バヌゞョンぞのアップグレヌドには、 いく぀かの重芁な倉曎 が加えられおいたす。 Kubernetes拡匵機胜を䜿甚しおKnativeマニフェストを生成できるようになりたした。 QuarkusのAmazonのLambdaアヌキタむプはSAMテンプレヌトを提䟛したす。 quarkus.flyway.clean-at-start構成がFlyway拡匵機胜に远加されたした。 党おの倉曎蚘録 1.1 .0.CR1 ず 1.1 .0.Final の完党な倉曎ログはGitHubで入手できたす。 Contributors Quarkusには珟圚206人のコントリビュヌタがいたす。私たちは200人を超えおおり、あなたの貢献を楜しみにしおいたす。䞀人䞀人に感謝したす。 特に1.1 .0リリヌスでは以䞋の方々のおかげです。 Alessio Soldano, Alex Kochnev, Alex Soto, Alexander Zimmermann, Alexey Loubyansky, Anamarija Talijanac, Andrew Guibert, Andy Damevin, Aurea Munoz, Claus Ibsen, Clement Escoffier, Cristiano Nicolai, CSTDev, Danilo Magalhães, David M. Lloyd, David Walluck, Dennis Baerten, Elegie, Emmanuel Bernard, Eric Wittmann, Erik Jan de Wit, Erin Schnabel, Fabian Martinez, Fabio Heer, Filippe Spolti, Galder Zamarreño, George Gastaldi, Georgios Andrianakis, Guillaume Smet, Gunnar Morling, Gwenneg Lepage, Gytis Trikleris, Hantsy Bai, Hebert Coelho, Ioannis Canellos, Irena Kezic, Jacob Middag, Jaikiran Pai, Jan Martiska, Johannes, John O’Hara, John Oliver, Jonas Eriksson, Jonas Scholz, Jorge Solórzano, Jose Quaresma, Justin Holmes, Justin Lee, Ken Finnigan, Kevin Viet, Logan Hauspie, Loïc Mathieu, Luca Masini, Maciej Swiderski, Manyanda Chitimbo, Marcin Czeczko, Martin Kouba, Martin Stefanko, Matej Novotny, Max Rydahl Andersen, Michael Musgrove, Michael Simons, Michal Karm Babacek, Michał Szynkiewicz, Moncef Aoudia, Ondra Chaloupka, Paul Robinson, Pedro Igor, Rohan Maity, Rostislav Svoboda, Sanne Grinovero, Sebastien Blanc, Sergey Beryozkin, Simon Bengtsson, soberich, Stuart Douglas, Stéphane Épardaud, Tako Schotanus, Tiago Dolphine, Timothy Power, Vincent Sevel, Vinicius Ferraz, William Burns and Yoann RodiÚre. Come Join Us 私たちはあなたのフィヌドバックをずおも倧切にしおいたすので、バグを報告しお、改善を求めおください...。䞀緒に䜕かを䜜ろう! Quarkusナヌザや興味のある方は、遠慮せずに歓迎コミュニティに参加しおください。 GitHub にフィヌドバックを提䟛する; コヌドを䜜成しお PRを行う ; Zulip や メヌリングリスト で議論する; なにか質問があれば Stack Overflow で投皿しおください。