centos7下kubernetes(15。kubernetes-外网访问service)

时间:2021-04-01 17:54:20

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文件

centos7下kubernetes(15。kubernetes-外网访问service)

添加type:NodePort,然后重新创建service

centos7下kubernetes(15。kubernetes-外网访问service)

centos7下kubernetes(15。kubernetes-外网访问service)

kubernetes依然会为httpd-svc分配一个cluterIP,不同的是:

1.Type类型是Nodeprot,

2.Port是8080:32242/TCP,8080依然是cluster的端口,32242是node节点的端口,Kubernetes 会从 30000-32767 中分配一个可用的端口,每个节点都会监听此端口并将请求转发给service

centos7下kubernetes(15。kubernetes-外网访问service)

测试nodeport是否正常工作:

centos7下kubernetes(15。kubernetes-外网访问service)

通过两个节点的IP+端口都可以正常的访问

那么,kubernetes是如何将nodeip+端口映射到pod的呢?

与clusterIP一样也是通过iptables,与clusterIP相比,每个节点的eiptables中增加了下面两条规则

centos7下kubernetes(15。kubernetes-外网访问service)

访问node节点的32242时会应用 KUBE-SVC-RL3JAE4GN7VOGDGP规则

centos7下kubernetes(15。kubernetes-外网访问service)

其实就是负载均衡到每一个pod

noedport默认是随机选择,不过我们可以用nodeport指定特定的端口

centos7下kubernetes(15。kubernetes-外网访问service)

现在配置文件中有三个Port

nodeport是节点上监听的端口。

port是clusterIP上监听的端口

targetport是pod监听的端口

最终,node和clusterIP在各自端口上接受到的请求都会通过iptables转发到pod的targetport上

centos7下kubernetes(15。kubernetes-外网访问service)

nodeport:30000已经生效了