在kubernetes集群中使用nginx反向代理组织.net核心应用程序的最佳方式是什么?

在kubernetes集群中使用nginx反向代理组织.net核心应用程序的最佳方式是什么?,nginx,asp.net-core,kubernetes,Nginx,Asp.net Core,Kubernetes,我想在Azure Kubernetes服务上部署一个带有NGINX反向代理的.NET核心应用程序。组织吊舱和容器的最佳方式是什么 两个单容器吊舱,一个用于nginx,一个用于app(.net core/kestrel),因此每个吊舱都可以独立扩展 一个多容器吊舱,这个吊舱有两个容器(一个用于nginx,一个用于应用程序) 一个单一容器吊舱,一个运行nginx和.net应用程序的单一容器 我会选择第一个选项,但我不知道这是否是正确的选择,如果能知道每个选项的优缺点就好了 如果我选择第1个选项,是否

我想在Azure Kubernetes服务上部署一个带有NGINX反向代理的.NET核心应用程序。组织吊舱和容器的最佳方式是什么

  • 两个单容器吊舱,一个用于nginx,一个用于app(.net core/kestrel),因此每个吊舱都可以独立扩展

  • 一个多容器吊舱,这个吊舱有两个容器(一个用于nginx,一个用于应用程序)

  • 一个单一容器吊舱,一个运行nginx和.net应用程序的单一容器

  • 我会选择第一个选项,但我不知道这是否是正确的选择,如果能知道每个选项的优缺点就好了


    如果我选择第1个选项,是否最好将affinity设置为将nginx pod放在与app pod相同的节点中?或者反亲和力,以便它们部署在不同的节点上?或者根本没有亲缘关系/反亲缘关系?

    Kubernetes中入站流量的最佳实践是使用资源。这需要在AKS中进行一些额外的设置,因为没有内置的入口控制器。你肯定不想做#2,因为它不灵活,而且#3在我看来是不可能的

    Kubernetes
    Ingress
    资源是一个配置文件,用于管理入站群集流量的反向代理规则。这允许您将多个服务作为一个组合API来呈现

    要设置入口,首先在自动生成的MC资源组中创建公共IP地址:

    az network public-ip create `
        -g MC_rg-name_cluster-name_centralus `
        -n cluster-name-ingress-ip `
        -l centralus `
        --allocation-method static `
        --dns-name cluster-name-ingress
    
    现在创建一个入口控制器。这是实际处理来自公共IP的入站流量所必需的。它坐着并监听KubernetesAPI
    Ingress
    更新,并自动生成一个
    nginx.conf
    文件

    # Note: you'll have to install Helm and its service account prior to running this. See my GitHub link below for more information
    helm install stable/nginx-ingress `
        --name nginx-ingress `
        --namespace default `
        --set controller.service.loadBalancerIP=ip.from.above.result `
        --set controller.scope.enabled=true `
        --set controller.scope.namespace="default" `
        --set controller.replicaCount=3
    
    kubectl get service nginx-ingress-controller -n default -w
    
    设置后,请确保在
    ingres
    资源上使用此注释:
    kubernetes.io/ingres.class:nginx


    如果您想了解更多关于如何设置的信息,请参阅本周我整理的内容。我还包括了带有
    cert manager的TLS终端
    ,也安装了Helm.

    ,但我需要使用nginx入口在所有服务之间进行路由,并为我的.net应用程序和我的应用程序添加一个nginx。两层nginx或nginx入口将请求直接路由到my.ney app?nginx仅在这种特定情况下用于入口。一旦你的流量在你的应用程序中,你可以通过服务名称引用集群中的其他应用程序。不需要额外的nginx我的应用程序使用.net核心内置kestrel服务器,该服务器没有足够的web服务器功能,如gzip压缩、ssl和请求日志。通常在kestrel前面使用nginx作为反向代理,将请求路由到未公开的kestrel。我应该在nginx/ingress中做所有这些事情(压缩、https、请求日志等),还是最好在我的应用程序前面有另一个nginx来处理这些事情,使之与nginx ingress已经做的所有其他事情隔离开来?你有什么建议@brandon Barnett入口控制器的工作是终止TLS并在集群内路由流量。为it提供您建议的额外工作会给it带来太多应用程序特有的问题,尤其是当您开始围绕it构建更多应用程序时。我的建议是创建云LB流(此自动配置
    nginx-ingres
    installation)>
    nginx-ingres
    >内部nginx/HAProxy/envision/Varnish负载均衡器(启用附加功能)>.NET核心应用程序