kubectl proxy初体验
背景
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/