centos7下kubernetes(15。kubernetes-外网访问service)
kubernetes提供了多种类型的service,默认是cluster IP
ClusterIP
cluster内部IP对外提供服务,只有cluster内的节点和pod可访问,这是默认的service。
NodePort
service通过cluster节点的静态端口对外提供服务,cluster外部可以通过 nodeip:nodeport访问service
loadbalancer
Service 利用 cloud provider 特有的 load balancer 对外提供服务,cloud provider 负责将 load balancer 的流量导向 Service。目前支持的 cloud provider 有 GCP、AWS、Azure 等。
实验nodeport
更改service的yml文件
添加type:NodePort,然后重新创建service
kubernetes依然会为httpd-svc分配一个cluterIP,不同的是:
1.Type类型是Nodeprot,
2.Port是8080:32242/TCP,8080依然是cluster的端口,32242是node节点的端口,Kubernetes 会从 30000-32767 中分配一个可用的端口,每个节点都会监听此端口并将请求转发给service
测试nodeport是否正常工作:
通过两个节点的IP+端口都可以正常的访问
那么,kubernetes是如何将nodeip+端口映射到pod的呢?
与clusterIP一样也是通过iptables,与clusterIP相比,每个节点的eiptables中增加了下面两条规则
访问node节点的32242时会应用 KUBE-SVC-RL3JAE4GN7VOGDGP规则
其实就是负载均衡到每一个pod
noedport默认是随机选择,不过我们可以用nodeport指定特定的端口
现在配置文件中有三个Port
nodeport是节点上监听的端口。
port是clusterIP上监听的端口
targetport是pod监听的端口
最终,node和clusterIP在各自端口上接受到的请求都会通过iptables转发到pod的targetport上
nodeport:30000已经生效了