【问题标题】:How to set EXTERNAL-IP for kubernetes Loadbalancer Service by Client-go?如何通过 Client-go 为 kubernetes Loadbalancer Service 设置 EXTERNAL-IP?
【发布时间】:2019-12-03 17:18:34
【问题描述】:

我想通过client-go自定义一个负载均衡器控制器,现在我只是尝试为服务设置一个地址,但它不起作用。 这是我的代码:

func (c *Controller) syncToStdout(key string) error {
    obj, exists, err := c.indexer.GetByKey(key)
    if err != nil {
        klog.Errorf("Fetching object with key %s from store failed with %v", key, err)
        return err
    }

    if !exists {
        fmt.Printf("Pod %s does not exist anymore%s\n", key)
    } else {
        service := obj.(*v1.Service)
        if service.ObjectMeta.Annotations["service.beta.kubernetes.io/netease-cloud"] == "nlb" {
            klog.Info("service belong to NLB, name = ", service.GetName())
            // [0].IP = "10.123.234.213";
            service.Status.LoadBalancer.Ingress = []v1.LoadBalancerIngress{{IP: "10.123.234.213"}}
            _, _ = clientset.CoreV1().Services(v1.NamespaceDefault).Update(service)
            klog.Info("service belong to NLB, service = ", service)
        } else {
            klog.Info("service not belong to NLB, name = ", service.GetName())
        }
    }
    return nil
}

然后我得到服务配置,ip没有设置。

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/netease-cloud: nlb
  creationTimestamp: "2019-11-29T07:39:41Z"
  name: httpd-service
  namespace: default
  resourceVersion: "480971"
  selfLink: /api/v1/namespaces/default/services/httpd-service
  uid: 3000dddd-3d56-4989-af41-6d6a9bab7565
spec:
  clusterIP: 10.108.100.92
  externalTrafficPolicy: Cluster
  ports:
  - nodePort: 30000
    port: 8080
    protocol: TCP
    targetPort: 80
  selector:
    app: httpd
  sessionAffinity: None
  type: LoadBalancer
status:
  loadBalancer: {}

如何为 LoadBalancer 服务设置 ip?

【问题讨论】:

  • 您能描述一下您的基础架构吗?我假设你有 Ingress。设置是什么?现在我们只能“假设”:)
  • 没有基础设施,没有入口。我只是想写一个kubernetes控制器来观察Service。如果Service类型是LoadBalancer,并且注解存在“service.beta.kubernetes.io/netease-cloud:nlb”,我给它分配一个IP。

标签: kubernetes client-go


【解决方案1】:

使用clientset.CoreV1().Services(v1.NamespaceDefault).UpdateStatus(service)可以解决。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-22
    • 2021-06-19
    • 2019-02-01
    • 1970-01-01
    • 2021-11-10
    • 2017-11-03
    • 2021-04-21
    • 1970-01-01
    相关资源
    最近更新 更多