Deploying ASP.NET Core applications to Kubernetes can significantly enhance scalability, reliability, and manageability. This tutorial guides developers through the essential steps to containerize an ASP.NET Core app and deploy it on a Kubernetes cluster.

Prerequisites

  • Basic knowledge of ASP.NET Core development
  • Docker installed on your machine
  • Kubernetes cluster (local or cloud-based)
  • kubectl command-line tool configured
  • Azure CLI or other cloud provider tools (optional)

Step 1: Prepare Your ASP.NET Core Application

Ensure your ASP.NET Core project is ready for containerization. Test it locally and verify it runs without issues.

Step 2: Create a Dockerfile

In your project root, create a Dockerfile with the following content:

FROM mcr.microsoft.com/dotnet/aspnet:7.0 AS base
WORKDIR /app
EXPOSE 80

FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build
WORKDIR /src
COPY ["YourProject.csproj", "./"]
RUN dotnet restore "YourProject.csproj"
COPY . .
WORKDIR "/src/."
RUN dotnet build "YourProject.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "YourProject.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "YourProject.dll"]

Step 3: Build and Push Docker Image

Build your Docker image and push it to a container registry like Docker Hub or Azure Container Registry.

docker build -t yourusername/yourapp:latest .
docker push yourusername/yourapp:latest

Step 4: Create Kubernetes Deployment and Service

Define deployment and service YAML files to deploy your app on Kubernetes.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: aspnetcore-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: aspnetcore
  template:
    metadata:
      labels:
        app: aspnetcore
    spec:
      containers:
      - name: aspnetcore
        image: yourusername/yourapp:latest
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: aspnetcore-service
spec:
  type: LoadBalancer
  selector:
    app: aspnetcore
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80

Step 5: Deploy to Kubernetes

Apply the configuration to your Kubernetes cluster:

kubectl apply -f deployment.yaml

Step 6: Verify Deployment

Check the status of your pods and services:

kubectl get pods
kubectl get services

Step 7: Access Your Application

Retrieve the external IP address of your service and open it in a browser:

kubectl get service aspnetcore-service

Navigate to the provided IP address to see your application running on Kubernetes.

Conclusion

With these steps, you have successfully containerized an ASP.NET Core application and deployed it on a Kubernetes cluster. This setup offers scalable and manageable deployment options suitable for production environments.