.NET Core控制台应用程序如何部署到Kubernetes?

4
我有一个控制台应用程序,它充当一些消息代理的监听器。我已经将其容器化并成功地在本地docker上运行。现在我想将其部署到Kubernetes(特别是AWS上的EKS)。
因此,我创建了一个需要用于部署的yaml文件,但是,我对yaml文件中需要的端口感到困惑。从部署API的经验来看,我知道端口应该与Docker Image公开的端口相同,但是控制台应用程序既不公开任何端口,也不需要运行端口。
因此,我只是随便写了一些端口尝试部署。自然而然地,它无法正常工作。我已经从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: {}

如果有人能提供帮助,我会非常感激!谢谢!


然而,控制台应用程序不公开任何端口,也不需要任何端口运行。- 你的意思是你的应用程序不会在任何端口上监听连接吗? - ProgrammingLlama
@John 你好,不是的,它是直接从AWS SQS服务中获取的。 - Sivvie Lim
1
那么我认为您不需要暴露任何端口,也不需要服务,因为没有端口。 - ProgrammingLlama
@John 我明白了,所以这个负载均衡器是不需要的。至于部署,容器端口只需要任何端口号就可以了吗? - Sivvie Lim
@John 嘿,它能够在不需要负载均衡器的情况下正常运行,只需部署并检查日志!感谢您的帮助!你可以将其写成答案,这样我就可以标记它为有用的!谢谢! - Sivvie Lim
很高兴能够帮助。我已经添加了一个答案 :) - ProgrammingLlama
1个回答

9
如果你的项目实际上并没有监听任何端口,那么你就不需要暴露任何端口。你可以从部署中删除这些行。
ports:
- containerPort: 5999

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接