Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# NET核心控制台应用程序如何部署到Kubernetes?_C#_Docker_Kubernetes_.net Core_Amazon Eks - Fatal编程技术网

C# NET核心控制台应用程序如何部署到Kubernetes?

C# NET核心控制台应用程序如何部署到Kubernetes?,c#,docker,kubernetes,.net-core,amazon-eks,C#,Docker,Kubernetes,.net Core,Amazon Eks,我有一个控制台应用程序,它充当来自某个消息代理的侦听器。我已经把它装进集装箱,并成功地作为一名本地码头工人运行。现在我想将它部署到Kubernetes,特别是AWS上的EKS 因此,我创建了一个部署所需的yaml文件,但是,我对yaml文件中所需的端口感到困惑。根据部署API的经验,我知道端口应该与Docker映像公开端口相同,但是控制台应用程序不公开任何端口,也不需要运行任何端口 因此,我只需拿出一些端口并尝试部署。当然,这是行不通的。我已从ECR中提取图像并运行以确认其工作正常。仅EKS的部

我有一个控制台应用程序,它充当来自某个消息代理的侦听器。我已经把它装进集装箱,并成功地作为一名本地码头工人运行。现在我想将它部署到Kubernetes,特别是AWS上的EKS

因此,我创建了一个部署所需的yaml文件,但是,我对yaml文件中所需的端口感到困惑。根据部署API的经验,我知道端口应该与Docker映像公开端口相同,但是控制台应用程序不公开任何端口,也不需要运行任何端口

因此,我只需拿出一些端口并尝试部署。当然,这是行不通的。我已从ECR中提取图像并运行以确认其工作正常。仅EKS的部署不可用

我想知道有没有一种正确的方法可以将.NET核心控制台应用程序部署到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: {}

如果有人能帮忙,我真的很感激!谢谢

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

ports:
- containerPort: 5999

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

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

ports:
- containerPort: 5999

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

但是,控制台应用程序不公开任何端口,也不需要运行任何端口。-你是说你的应用程序不监听任何端口上的连接吗?@John Hi,不,它是直接从AWS SQS服务监听的。那么我认为你不需要暴露任何端口,也不需要服务,因为没有端口。@John,我明白了,所以LoadBalancer不需要这样做。至于部署,容器端口只是简单的任何端口号都可以吗?@John-Hey它可以在没有任何负载平衡器需要的情况下工作,只是部署并检查日志!谢谢你的帮助!你可以把它写成答案,这样我就可以把它标记为有用的!非常感谢。但是,控制台应用程序不公开任何端口,也不需要运行任何端口。-你是说你的应用程序不监听任何端口上的连接吗?@John Hi,不,它是直接从AWS SQS服务监听的。那么我认为你不需要暴露任何端口,也不需要服务,因为没有端口。@John,我明白了,所以LoadBalancer不需要这样做。至于部署,容器端口只是简单的任何端口号都可以吗?@John-Hey它可以在没有任何负载平衡器需要的情况下工作,只是部署并检查日志!谢谢你的帮助!你可以把它写成答案,这样我就可以把它标记为有用的!非常感谢。