如何在Kubernetes Go客户端中创建Service Port?ServiceSpec.Ports配置异常
问题分析与修复
你的代码里有两个关键错误导致Ports字段无法正常工作:
错误1:
make函数使用错误corev1.ServiceSpec.Ports的类型是[]corev1.ServicePort(ServicePort结构体的切片),但你用make(corev1.ServicePort, 1)试图创建单个ServicePort实例——make仅用于创建切片、map或channel类型,不能直接初始化结构体实例,这完全不符合语法规则。错误2:未将定义好的port加入切片
即便你正确创建了切片,也没有把之前定义的port变量添加到切片中,最终会导致Ports字段为空。
修正后的代码
import ( corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) func main() { // 定义单个ServicePort实例 port := corev1.ServicePort{ Port: 8443, } // 方式1:直接初始化包含目标port的切片 ports := []corev1.ServicePort{port} // 方式2:先创建空切片再追加元素(适合动态添加多个port的场景) // ports := make([]corev1.ServicePort, 0) // ports = append(ports, port) service := &corev1.Service{ ObjectMeta: metav1.ObjectMeta{ Name: "test-webhook-admissions", Namespace: "test", Labels: map[string]string{ "app.kubernetes.io/instance": "test", "app.kubernetes.io/name": "test", "control-plane": "controller-manager", }, }, Spec: corev1.ServiceSpec{ Ports: ports, // 现在可正常赋值 Selector: nil, }, } }
内容的提问来源于stack exchange,提问作者jmcgrath207
相关产品推荐
相关产品推荐

