当前位置: 首页 > 知识库问答 >
问题:

使用单个ALB、多个命名空间和外部DNS的EKS入口

傅元龙
2023-03-14

我试图在aws EKS中跨多个名称空间配置单个ALB,每个名称空间都有自己的入口资源。

我正在尝试在k8s v1.20上配置入口控制器aws loadbalancer控制器。

我面临的问题是,每次尝试部署新服务时,除了入口配置中指定的共享ALB之外,它总是启动一个新的经典负载平衡器。

https://kubernetes-sigs.github.io/aws-load-balancer-controller/v2.2/

# service-realm1-dev.yaml:
apiVersion: v1
kind: Service
metadata:
  name: sentinel
  annotations:
    external-dns.alpha.kubernetes.io/hostname: realm1.dev.sentinel.mysite.io
  namespace: realm1-dev
  labels:
    run: sentinel
spec:
  ports:
    - port: 5001
      name: ps1
      protocol: TCP
  selector:
    app: sentinel
  type: LoadBalancer
# ingress realm1-app
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: alb
    alb.ingress.kubernetes.io/group.name: sentinel-ingress
    alb.ingress.kubernetes.io/scheme: internet-facing
    alb.ingress.kubernetes.io/target-type: ip
    alb.ingress.kubernetes.io/healthcheck-protocol: HTTP
    alb.ingress.kubernetes.io/healthcheck-port: traffic-port
    alb.ingress.kubernetes.io/healthcheck-interval-seconds: "15"
    alb.ingress.kubernetes.io/healthcheck-timeout-seconds: "5"
    alb.ingress.kubernetes.io/success-codes: 200-300
    alb.ingress.kubernetes.io/healthy-threshold-count: "2"
    alb.ingress.kubernetes.io/unhealthy-threshold-count: "2"
    alb.ingress.kubernetes.io/listen-ports: '[{"HTTP":80}]'
  name: sentinel-ingress-controller
  namespace: realm1-dev
spec:
  rules:
    - host: realm1.dev.sentinel.mysite.io
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              servicePort: use-annotation
              serviceName: sentinel

此外,我正在使用外部dns创建route53 reecodset,然后使用相同配置的dns将请求路由到特定的eks服务,这种方法是否存在任何问题?

共有2个答案

宗政博
2023-03-14

不幸的是,用于用例的工具是错误的。AWS负载平衡器控制器将为每个入口资源创建一个新的负载平衡器,我认为,它为每个服务资源创建一个网络负载平衡器。

对于您的用例,最好的选择是使用nginx入口控制器。您可以在任何1个命名空间中部署nginx入口控制器,然后在整个集群中创建入口资源,并且可以在整个集群中进行基于路径/主机名的路由。

如果您有许多团队/项目/应用程序,并且希望避免所有应用程序都依赖于1个ELB的单点故障,那么您可以在k8s集群中部署多个nginx入口控制器。

您只需要在nginx入口控制器部署中定义一个入口类变量,并在应用程序上添加该入口类注释。这样,具有ingress class:nginxA注释的应用程序将与部署中具有ingress class=nginxA的nginx ingress控制器集群在一起。

古起运
2023-03-14

我只使用了一个ALB,@YYashwanth就能让它工作,使用Nginx是我的备用计划,我正在尝试使配置尽可能简单,也许将来我们将尝试在其他云提供商中部署我们的解决方案时,我们将使用Nginx入口控制器。

1-要启动服务类型应为节点端口,请使用loadbalancer创建经典LB。

apiVersion: v1
kind: Service
metadata:
  name: sentinel-srv
  annotations:
    external-dns.alpha.kubernetes.io/hostname: operatorv2.dev.sentinel.mysite.io
  namespace: operatorv2-dev
  labels:
    run: jsflow-sentinel
spec:
  ports:
    - port: 80
      targetPort: 80
      name: ps1
      protocol: TCP
  selector:
    app: sentinel-app
  type: NodePort

2秒,我们需要配置组。名称,用于入口控制器使用注释alb合并所有入口配置。进入。库伯内特斯。io/组。名称

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  annotations:
    alb.ingress.kubernetes.io/healthcheck-interval-seconds: "15"
    alb.ingress.kubernetes.io/healthcheck-path: /
    alb.ingress.kubernetes.io/healthcheck-port: traffic-port
    alb.ingress.kubernetes.io/healthcheck-protocol: HTTP
    alb.ingress.kubernetes.io/healthcheck-timeout-seconds: "5"
    alb.ingress.kubernetes.io/healthy-threshold-count: "2"
    alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80} ]'
    alb.ingress.kubernetes.io/scheme: internet-facing
    alb.ingress.kubernetes.io/success-codes: "200"
    alb.ingress.kubernetes.io/tags: createdBy=aws-controller
    alb.ingress.kubernetes.io/target-type: ip
    alb.ingress.kubernetes.io/unhealthy-threshold-count: "2"
    external-dns.alpha.kubernetes.io/hostname: operatorv2.sentinel.mysite.io
    kubernetes.io/ingress.class: alb
    alb.ingress.kubernetes.io/group.name: sentinel-group
  name: dev-operatorv2-sentinel-ingress-controller
  namespace: operatorv2-dev
spec:
  rules:
    - host: operatorv2.dev.sentinel.mysite.io
      http:
        paths:
          - path: /*
            backend:
              servicePort: 80
              serviceName: sentinel-srv
 类似资料:
  • 我遇到了一种情况,多个Kubernetes命名空间被配置为使用一个入口主机。对K8s入口控制器的请求将来自负载平衡器F5。 如果用户向示例发送请求。com/api/service1,该请求将降落在F5上,F5将把它路由到工作节点,而不更改URL。K8s入口需要将请求路由到不同的命名空间,但正如我所提到的,所有命名空间都使用相同的入口(例如.com)。 我关心的是K8s入口将如何将请求转发到适当的命

  • 我使用maven-jaxb2-plugin生成java文件从wsdl之一。运行“生成源”目标后,我得到以下错误 有几个wsdl文件,我需要不同的目标包,所以我尝试使用绑定文件,但现在只有1个wsdl。 这是我的插件配置 这是装订。xjb文件 开始服务。wsdl文件 看起来问题与具有相同targetNamespace的多个xs:schema元素有关,但我找不到如何在不修改wsdl的情况下修复它。

  • 我使用SpringBoot创建了一个SOAP Web服务服务器,并且我能够成功创建一个endpoint。但是,我无法创建多个endpoint并使用不同的URL访问它们。我想通过URL来访问处理该过程。 每个endpoint接收到的SOAP消息具有相同的模式。(命名空间和localpart是相同的!!!)我不想公开WSDL。 例如。 userA向以下URL发送以下SOAP消息:http://soap

  • 我需要在K8S中管理部署的建议。我需要使用gitops进行蓝色/绿色部署,这基本上给我留下了两个选择: 这将需要使用helm来管理删除资源等等,并通过helm通过代理管理blue/green,而这又将需要创建重复的部署模板(用于green和blue)。 优点:由掌舵人管理,会删除已删除的资源;似乎是一般的做法。 缺点:由helm管理,可能会搞砸一些东西,特别是在多个失败的部署中;可以创建雪花命名空

  • 尝试使用camel cxf bean调用外部soap服务,但不确定如何在setHeader中传递多个名称空间。 OPERATION_NAMESPACE,常量("http://test.org/Imports") 对于其中一个操作,需要传递2个命名空间作为http://test.org/Importshttp://globe.org/schema 让我知道我们如何在调用cxf bean之前将骆驼头中

  • 我试图在库伯内特斯上编写一个在AWS EKS下工作的网络策略。我想实现的是允许来自同一命名空间的pod/pod流量,并允许从AWS ALB入口转发的外部流量。 AWS ALB入口是在同一个NameSpace下创建的,所以我在想只有使用DENY来自其他命名空间的所有流量就足够了,但是当我使用来自ALB入口负载均衡器(其内部IP地址与pod/pod位于同一名称空间)的流量时是不允许的。然后,如果我添加