【问题标题】:unable to deploy ingress in local kubernetes cluster无法在本地 kubernetes 集群中部署入口
【发布时间】:2018-03-12 22:21:31
【问题描述】:

我正在尝试通过在本地 kubernetes 集群中使用入口控制器来为我的两个 Web 应用程序设置前端。我遵循了 [1] 中列出的所有步骤和 [2] 中的详细说明。但到目前为止运气不佳。我得到的错误如下:

Warning CreatingLoadBalancerFailed Error creating load balancer (will retry): failed to ensure load balancer for service default/frontend: error creating loadbalancer a58617b3f260011e8ad84fa163e0c90a: error creating loadbalancer {a58617b3f260011e8ad84fa163e0c90a
Kubernetes external service a58617b3f260011e8ad84fa163e0c90a 7b4db6f7-3fc1-4c07-a84d-5c15b46e3ac2 <nil> }: Expected HTTP response code [201 202] when accessing [POST https://host.xyz.com:9696/v2.0/lbaas/loadbalancers],
but got 409 instead
{"NeutronError": {"message": "Quota exceeded for resources: ['loadbalancer'].", "type": "OverQuota", "detail": ""}}

我的服务处于待处理状态。

到目前为止,我不知道在哪里可以找到问题并希望得到任何建议。

manifest yaml 文件几乎与 [2] 相同,它只列出了 https 接口。但这里是为了完整性

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
   name: frontend
   annotations:
     ingress.kub.webernetes.io/rewrite-target: /
spec:
  tls:
  - secretName: ing-secret
  replicas: 1
  template:
    metadata:
      labels:
        k8s-app: nginx-ingress-lb
  containers:
  - args:
    - /nginx-ingress-controller
    - "--default-backend-service=$(POD_NAMESPACE)/default-http-backend"
    - "--default-ssl-certificate=$(POD_NAMESPACE)/ing-secret"
  env:
    - name: POD_NAME
      valueFrom:
        fieldRef:
          fieldPath: metadata.name
    - name: POD_NAMESPACE
      valueFrom:
        fieldRef:
          fieldPath: metadata.namespace
  image: "gcr.io/google_containers/nginx-ingress-controller:0.9.0-beta.5"
  rules:
  - host: host.xxx.com
    https:
      paths:
      - path: /app1
        backend:
          serviceName: app1
          servicePort: 8881
      - path: /app2
        backend:
          serviceName: app2
          servicePort: 8882
---
apiVersion: v1
kind: Service
metadata:
  name: frontend
spec:
  type: LoadBalancer
  ports:
  - name: https
    port: 443
    targetPort: https
  selector:
    k8s-app: nginx-ingress-lb

[1]https://kubernetes.io/docs/concepts/services-networking/ingress/

[2]https://hackernoon.com/setting-up-nginx-ingress-on-kubernetes-2b733d8d2f45

【问题讨论】:

    标签: nginx kubernetes kubernetes-ingress


    【解决方案1】:

    kubernetes 似乎正在使用 OpenStack lbaas 来配置入口资源底层的负载均衡器服务(请参阅错误日志中的 https://host.xyz.com:9696/v2.0/lbaas/loadbalancers

    AFAIK 此错误表明已配置的负载平衡器数量已达到资源限制。我会向您的集群管理员提出这个问题。

    【讨论】:

    • 原来问题确实出在集群配置中。
    【解决方案2】:

    您的服务正在尝试在 AWS 中创建新的负载均衡器,并且超出了您所在区域的配额。我假设您有 20 个,因为这是默认值: https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html#limits_elastic_load_balancer

    以下是有关如何请求提高限额的说明: https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html

    【讨论】:

    • 这不是 AWS,我正在处理本地集群。所以我需要知道本地集群有什么问题(如果有的话)。另外,目前还不清楚限制应该是什么以及如何限制。基本上 20 意味着什么,平衡器的数量?可能有多少个集群?有多少人被占用?
    • 服务类型:LoadBalancer 与云提供集成。尝试将其更改为 NodePort。 kubernetes.io/docs/concepts/services-networking/service/…
    • 这是我考虑的选项,但我无法确定 NodePort 是否可以服务多个端点(到不同应用程序的路由)。基本上我需要一个前端,它将 /app1 重定向到一个端口上的一个后端,将 /app2 重定向到另一个端口上的另一个后端。我很乐意尝试,但在 kubernetes 网站上找不到任何示例。
    • 使用 NodePort 替换服务类型的 LoadBalancer 将使服务后面的示例中的所有内容保持不变。它只是使用一个端点(节点上的开放端口)而不是物理负载均衡器来访问您的集群。
    猜你喜欢
    • 2022-08-23
    • 1970-01-01
    • 1970-01-01
    • 2020-09-14
    • 2019-11-25
    • 1970-01-01
    • 1970-01-01
    • 2020-01-15
    • 1970-01-01
    相关资源
    最近更新 更多