K8s获取NodePort


K8s获取NodePort

(金庆的专栏 2018.9)

将服务用NodePort暴露到外网,为避免端口冲突,不指定NodePort,
而是让k8s自动选择一个端口。

$ cat get_node_port.yaml kind: Service apiVersion: v1 metadata: name: jq-service spec: type: NodePort selector: app: MyApp ports: - protocol: TCP port: 80
$ kubectl apply -f get_node_port.yaml service "jq-service" configured $ kubectl describe svc/jq-service Name: jq-service Namespace: default Labels: <none> Annotations: kubectl... Selector: app=MyApp Type: NodePort IP: 10.104.228.187 Port: <unset> 80/TCP TargetPort: 80/TCP NodePort: <unset> 32115/TCP Endpoints: <none> Session Affinity: None External Traffic Policy: Cluster Events: <none>

可以看到k8s分配了NodePort 32115。

然后需要获取这个动态的NodePort,以通知客户端连接该端口。

cat main.go package main import ( "context" "fmt" "log" "io/ioutil" "github.com/ghodss/yaml" "github.com/ericchiang/k8s" corev1 "github.com/ericchiang/k8s/apis/core/v1" ) func main() { data, err := ioutil.ReadFile("config") if err != nil { panic(err) } // Unmarshal YAML into a Kubernetes config object. var config k8s.Config if err := yaml.Unmarshal(data, &config); err != nil { panic(err) } client, err := k8s.NewClient(&config) // client, err := k8s.NewInClusterClient() if err != nil { log.Fatal(err) } var svc corev1.Service if err := client.Get(context.Background(), "default", "jq-service", &svc); err != nil { log.Fatal(err) } fmt.Printf("%d\n", *svc.Spec.Ports[0].NodePort) }
 

运行时需要复制config: cp ~/.kube/config .


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM