【问题标题】:How does a .NET Core console application deploy to Kubernetes?.NET Core 控制台应用程序如何部署到 Kubernetes?
【发布时间】:2020-11-13 06:09:04
【问题描述】:

我有一个控制台应用程序,它充当某个消息代理的侦听器。我已经将它容器化并成功作为本地 docker 运行。现在我想将它部署到 Kubernetes(特别是 AWS 上的 EKS)。

所以我创建了一个部署所需的 yaml 文件,但是,我对 yaml 文件中所需的端口感到困惑。根据部署API的经验,我知道端口应该和Docker Image暴露的端口一样,但是Console Application没有暴露任何端口,也不需要端口来运行。

所以我只是简单地放出一些端口并尝试部署。自然它不起作用。我已经从 ECR 中提取了图像并运行以确认它正在工作。只有部署到 EKS 不是。

我想知道将 .NET Core 控制台应用程序部署到 Kubernetes 的正确方法吗?

下面是我的 Dockerfile:

FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
WORKDIR /src
COPY ["Listener/Listener.csproj", "Listener/"]
COPY ["Infra/Infra.csproj", "Infra/"]
RUN dotnet restore "Listener/Listener.csproj"
COPY . .
WORKDIR "/src/Listener"
RUN dotnet build "Listener.csproj" -c Release -o /app/build

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

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

以下是此控制台应用程序的 yaml 文件:

apiVersion: apps/v1
items:
- apiVersion: v1
  kind: Service
  metadata:
    annotations:
      Process: listener
    creationTimestamp: null
    labels:
      app: listener
    name: listener
  spec:
    type: LoadBalancer
    ports:
    - name: "5999"
      port: 5999
      targetPort: 5999
    selector:
      app: listener
  status:
    loadBalancer: {}
- apiVersion: apps/v1
  kind: Deployment
  metadata:
    annotations:
      Process: listener
    creationTimestamp: null
    labels:
      app: listener
    name: listener
  spec:
    replicas: 1
    selector:
      matchLabels:
        app: listener
    strategy: {}
    template:
      metadata:
        creationTimestamp: null
        labels:
          app: listener
      spec:
        containers:
        - env:
          image: *****.dkr.ecr.<region>.amazonaws.com/listener:latest
          name: listener
          ports:
          - containerPort: 5999
          resources: {}
        restartPolicy: Always
  status: {}
kind: List
metadata: {}

如果有人能提供帮助,真的很感激!谢谢!

【问题讨论】:

  • “但是,控制台应用程序不公开任何端口,也不需要端口来运行。” - 你是说你的应用程序不监听任何端口上的连接港口?
  • @John 嗨,不,它是直接从 AWS SQS 服务监听的。
  • 那么我认为您不需要公开任何端口,或者因为没有端口而需要服务。
  • @John 我明白了,所以 LoadBalancers 不需要这个。至于部署,容器端口只是简单的任何端口号都行吗?
  • @John 嘿,它不需要任何负载均衡器就可以工作,只需部署并检查日志!谢谢你的帮助!您可以将其写为答案,以便我将其标记为有用!谢谢!

标签: c# docker kubernetes .net-core amazon-eks


【解决方案1】:

好吧,如果您的项目实际上没有监听任何端口,那么您就不需要公开任何端口。您可以从部署中删除这些行

ports:
- containerPort: 5999

而且,由于services 被定义为“将在一组 Pod 上运行的应用程序公开为网络服务的抽象方式”,因此您实际上也不需要服务定义,这意味着您所需要的只是您的部署。

【讨论】:

    猜你喜欢
    • 2018-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-09
    • 2015-06-09
    • 1970-01-01
    • 2016-01-26
    相关资源
    最近更新 更多