更新逻辑是不是有问题?

来源:13-5 Service更新接口开发

404_

2023-06-14

入下图红框中的内容,如果用我们自己转换的service.Spec替换从k8s中查询出的serviceK8s.Spec,我感觉是有问题的。serviceK8s中的spec.clusterIPs和spec.ipFamilies字段的值,就都没有了。我这执行这个更新逻辑的时候是报错的(我postman中只是修改了nodePort的端口)。

图片描述

我自己的代码逻辑

	// 提交数据到k8s
	serviceApi := global.KubeConfigSet.CoreV1().Services(service.Namespace)
	serviceK8s, err := serviceApi.Get(ctx, service.Name, metav1.GetOptions{})
	fmt.Printf("%+v\n", serviceK8s)
	//_, err = serviceApi.Get(ctx, serviceReq.Name, metav1.GetOptions{})
	if err == nil {
		// 查到了这个service,进行更新操作
		serviceK8s.Spec = service.Spec // 通过查询 得到的在k8s中的service信息回比我们自己转换的service会多一些信息,比如uid等。
		_, err := serviceApi.Update(ctx, serviceK8s, metav1.UpdateOptions{})
		if err != nil {
			response.FailWithDetail(ctx, "更新service失败", err.Error())
			return
		}
	} else {
		// 没有查到这个servie,进行新增操作
		_, err := serviceApi.Create(ctx, &service, metav1.CreateOptions{})
		if err != nil {
			response.FailWithDetail(ctx, "创建service失败", err.Error())
			return
		}
	}

报错信息:

{
	"code": 1,
	"data": "Service \"svc-web-30082\" is invalid: [spec.clusterIPs[0]: Invalid value: []string(nil): primary clusterIP can not be unset, spec.ipFamilies[0]: Invalid value: []core.IPFamily(nil): primary ipFamily can not be unset]",
	"msg": "更新service失败"
}

写回答

1回答

暮闲

2023-06-18

HI 同学你好,你在更新的时候传递了clusterIPS参数吗?

0
5
404_
非常感谢!
2023-06-23
共5条回复

Kubernetes系统精讲 Go语言实战K8S集群可视化

核心知识+高阶应用+原理剖析+二次开发 全方位打通K8S生产实践

399 学习 · 265 问题

查看课程