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已经生效了

posted @ 2018-10-23 15:11  无踪无影  阅读(967)  评论(0编辑  收藏  举报