kubectl proxy初体验

  |   0 评论   |   0 浏览

背景

kubectl如何对外暴露服务么?除了cluster, LoadBalancer,NodePort等,最方便的用于快速调试的方法就是使用kubectl proxy,让外部网络访问K8S service的ClusterIP。

原理

容器网络实例

来自[2]中的容器网络实例图。一个Host下有多个Pod,每个Pod内部有多个Container。

对应着有三个port:

  • port:cluster ip上的端口,供集群内访问使用。
  • nodePort:node上的端口,供集群外访问使用。
  • targetPort:pod上的端口,从port和nodePort上到来的数据最终经过kube-proxy流入到后端pod的targetPort上进入容器。

初体验

kubectl proxy快速开始

# kubectl proxy
Starting to serve on 127.0.0.1:8001


# kubectl proxy --address='0.0.0.0' --accept-hosts='^*$'
Starting to serve on [::]:8001

结果

curl -s localhost:8001 | head
{
  "paths": [
    "/api",
    "/api/v1",
    "/apis",
    "/apis/",
    "/apis/admissionregistration.k8s.io",
    "/apis/admissionregistration.k8s.io/v1beta1",
    "/apis/apiextensions.k8s.io",
    "/apis/apiextensions.k8s.io/v1beta1",

多个API Server

如果有多个k8s的apiserver,可以通过参数指定不同的配置文件和端口。

kubectl --kubeconfig="/x/.kube/config" --port=8079 proxy

API文档

https://v1-7.docs.kubernetes.io/docs/api-reference/v1.7/

参考

  1. kubernetes-api
  2. kubernetes中port、target port、node port的对比分析,以及kube-proxy代理