同步负载均衡器时出错:无法确保负载均衡器:无法构建负载均衡器

问题描述 投票:0回答:2

我们只是尝试 Kubernetes 设置并严格遵循文档(此时)。 我们在 DigitalOcean 上,还有很多与之相关的教程和文档(下面添加了所有这些以供参考)。

此时,我成功部署了两个 Pod,现在尝试以最简单的方式为它们配置负载均衡器。一切都已部署,但负载均衡器无法初始化,并出现以下错误:

Error syncing load balancer: failed to ensure load balancer: failed to build load-balancer request: specified health check port 8080 does not exist on service default/https-with-cert

如果我直接对 Pod 执行 ping 操作,我会验证运行状况检查实际上正在对 Pod 进行操作。事实上,这与我们过去两年在手动设置基础设施中使用的健康检查相同。

构建正在通过 github actions 运行,一切都顺利进行:

deployment.yml 如下所示:


---
kind: Service
apiVersion: v1
metadata:
  name: https-with-cert
  annotations:
    service.beta.kubernetes.io/do-loadbalancer-protocol: "http"
    service.beta.kubernetes.io/do-loadbalancer-algorithm: "round_robin"
    service.beta.kubernetes.io/do-loadbalancer-tls-ports: "443"
    service.beta.kubernetes.io/do-loadbalancer-certificate-id: "c1eae56c-42cd-4953-9ab9-1a6facae87f8"
    # "api.priz.guru" should be configured to point at the IP address of the DO load-balancer
    service.beta.kubernetes.io/do-loadbalancer-hostname: "api.priz.guru"
    service.beta.kubernetes.io/do-loadbalancer-enable-proxy-protocol: "true"
    service.beta.kubernetes.io/do-loadbalancer-disable-lets-encrypt-dns-records: "false"
    service.beta.kubernetes.io/do-loadbalancer-size-unit: "2"
    service.beta.kubernetes.io/do-loadbalancer-healthcheck-port: "8080"
    service.beta.kubernetes.io/do-loadbalancer-healthcheck-protocol: "http"
    service.beta.kubernetes.io/do-loadbalancer-healthcheck-path: "/v1/ping"
spec:
  type: LoadBalancer
  selector:
    app: priz-api
  ports:
    - name: http
      protocol: TCP
      port: 80
      targetPort: 8080
    - name: https
      protocol: TCP
      port: 443
      targetPort: 8080
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: priz-api
  labels:
    app: priz-api
spec:
  # modify replicas according to your case
  replicas: 2
  strategy:
    type: RollingUpdate
  selector:
    matchLabels:
      app: priz-api
  template:
    metadata:
      labels:
        app: priz-api
    spec:
      containers:
        - name: priz-api
          image: <IMAGE>
          env:
            - name: PRIZ_DATABASE_URL
              value: "${PRIZ_DATABASE_URL_PROD}"
            - name: PRIZ_DATABASE_USER
              value: "${PRIZ_DATABASE_USER_PROD}"
            - name: PRIZ_DATABASE_PASSWORD
              value: "${PRIZ_DATABASE_PASSWORD_PROD}"
            - name: PRIZ_AUTH0_DOMAIN
              value: "${PRIZ_AUTH0_DOMAIN_PROD}"
            - name: PRIZ_AUTH0_API_DOMAIN
              value: "${PRIZ_AUTH0_API_DOMAIN_PROD}"
            - name: PRIZ_AUTH0_API_CLIENT_ID
              value: "${PRIZ_AUTH0_API_CLIENT_ID_PROD}"
            - name: PRIZ_AUTH0_API_CLIENT_SECRET
              value: "${PRIZ_AUTH0_API_CLIENT_SECRET_PROD}"
            - name: PRIZ_APP_BASE_URL
              value: "${PRIZ_APP_BASE_URL_PROD}"
            - name: PRIZ_STRIPE_API_KEY_SECRET
              value: "${PRIZ_STRIPE_API_KEY_SECRET_PROD}"
            - name: PRIZ_SEARCH_HOST
              value: "${PRIZ_SEARCH_HOST_PROD}"
          ports:
            - containerPort: 8080
          resources:
            requests:
              cpu: 500m
              memory: 500Mi
            limits:
              cpu: 2000m
              memory: 2000Mi

我该如何调试这个问题?缺少什么?

我们使用的一些参考资料: https://docs.digitalocean.com/products/kubernetes/how-to/add-load-balancers/ https://docs.digitalocean.com/products/kubernetes/how-to/configure-load-balancers/ https://github.com/digitalocean/digitalocean-cloud-controller-manager/tree/master/docs/controllers/services/examples

kubernetes github-actions digital-ocean
2个回答
0
投票

我不知道是否是同样的问题,但按照以下步骤操作时出现了相同的错误消息

https://www.digitalocean.com/community/tutorials/how-to-set-up-an-nginx-ingress-on-digitalocean-kubernetes-using-helm

事实上,它第一次就工作了,但我已经删除了集群并在新集群上进行测试,以确保我现在修改的脚本可以从头开始工作......

我第二次遇到上述错误

所以我再次查看说明并注意到

此设置将使用具有三个节点的 DigitalOcean Kubernetes 集群,但您也可以手动创建集群。

为了节省成本,我设置了单节点集群

所以我再次开始使用默认的 3 节点集群,它按预期工作。


0
投票

这里是 Azure 用户,所以这对于 DigitalOcean 来说可能有点不同,但无论如何都是这样!

当云提供商为您提供负载均衡器时,根据云提供商的配置,kubelet 或控制平面都需要权限,以便在网络布局发生变化时(例如新节点上线时、新节点上线时)对负载均衡器进行更改。举几个例子,现有节点离线,尽管还有其他条件会改变网络布局)。

当您收到此错误时,这是因为集群的这 2 个组件之一缺少其所需的权限。

以Azure为例,当我们创建集群时,控制平面和kubelet有权编辑同一资源组中的资源。因此,如果我们在不同的资源组中创建网络,那么我们必须手动向网络资源组中的集群子网添加角色分配,从而授予控制平面和 kubelet 对该子网进行更改的权限。

快速阅读 DigitalOcean 文档可以确认 Azure 称之为资源组,DigitalOcean 称之为项目。我怀疑您的负载均衡器、VPC 和集群(或这 3 者的某种组合)可能位于不同的项目中,因此您需要将它们全部与同一个项目关联。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.