こんにちは。Specialist Solution Architect の瀬戸です。
説明すると、たまになんで?という反応をされることもあるのですが、Red HatはMicrosoftとアライアンスを結んでおり、.NETの実行をエンタープライズ品質でサポートしています。
Red HatはOpenJDKやJBoss EAP、Quarkusなどの開発をしていて、Javaに多大なコミットメントをしているということもあり、Javaしかサポートしていないよと勘違いされる場合もあるのですが、そんなことはなくて.NET/PHP/Node.js/Ruby/Python等いくつかの言語ランタイムもサポートしています。
何がサポートされているかについては次のページを参照してください。
なんと、.NETについては特設ページまであります。
.NETのサポートポリシーはこちら。
というだけで終わらせてもアレなので、実際に動かしてみましょう。
OpenShift上にプロジェクトを作成します。(OpenShift 4.16で確認しています。)
> oc new-project mydemo
GitHubにサンプルアプリケーションが準備されているので、そちらを指定してアプリケーションをデプロイします。
> oc new-app dotnet:8.0-ubi8~https://github.com/redhat-developer/s2i-dotnetcore-ex#dotnet-8.0 --context-dir app
次のように表示されます。
warning: Cannot check if git requires authentication.
--> Found image fece063 (8 days old) in image stream "openshift/dotnet" under tag "8.0-ubi8" for "dotnet:8.0-ubi8"
.NET 8
------
Platform for building and running .NET 8 applications
Tags: builder, .net, dotnet, dotnetcore, dotnet-80
* A source build using source code from https://github.com/redhat-developer/s2i-dotnetcore-ex#dotnet-8.0 will be created
* The resulting image will be pushed to image stream tag "s2i-dotnetcore-ex:latest"
* Use 'oc start-build' to trigger a new build
--> Creating resources ...
imagestream.image.openshift.io "s2i-dotnetcore-ex" created
buildconfig.build.openshift.io "s2i-dotnetcore-ex" created
deployment.apps "s2i-dotnetcore-ex" created
service "s2i-dotnetcore-ex" created
--> Success
Build scheduled, use 'oc logs -f buildconfig/s2i-dotnetcore-ex' to track its progress.
Application is not exposed. You can expose services to the outside world by executing one or more of the commands below:
'oc expose service/s2i-dotnetcore-ex'
Run 'oc status' to view your app.
デプロイが完了したかpodの状況を確認します。
> oc get pods -w NAME READY STATUS RESTARTS AGE s2i-dotnetcore-ex-1-build 0/1 Completed 0 110s s2i-dotnetcore-ex-5dd94d78d4-k95hf 1/1 Running 0 77s
デプロイが完了したらルートを作成して、公開します。
> oc expose service s2i-dotnetcore-ex route.route.openshift.io/s2i-dotnetcore-ex exposed > oc get route s2i-dotnetcore-ex NAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD s2i-dotnetcore-ex s2i-dotnetcore-ex-mydemo.apps.cluster-lbdm8.dynamic.redhatworkshops.io s2i-dotnetcore-ex 8080-tcp None
表示されたURLにアクセスすると実際に動いています。

使用したソースコードは次のリポジトリにあります。
s2iというOpenShiftの標準のデプロイシステムでも.NETをサポートしていますので、簡単にデプロイできます。 そのうえでRed HatとMicrosoftの強力なサポート体制もあるので、.NETアプリケーションを今まではWindowsサーバーを複数台立てて管理してたけど、インフラコストを抑えるために集約したい場合等の移行先としては良い選択肢になるのではないでしょうか。
また、デプロイの方法についてはJavaの場合とあまり変わりません。Javaの場合にどういうデプロイがされるかは次の記事を参照してください。 他の言語についても同じ感覚でデプロイすることができます。 OpenShiftの操作についての基礎知識がない場合も見ていただけるとocコマンドのインストール方法等が載ってます。
ということで、簡単なOpenShift上での.NETアプリケーションの紹介でした。