文章都可以转载、引用,标明转载出处即可。

kubernetes 1.5 配置(四)

Kubernetes Mr.c 1778℃ 0评论

  接着上文继续写,clusterIP 只能在集群内部访问,外部无法访问,NodePort 就很类似于映射方式,创建一个Service ,配置了一个NodePort 监听30000端口,那么集群内所有的node都会监听30000端口,不管访问该node上有没有对应的pod,随意访问任何一台node的30000端口都可以被转发到正确的后端pod中。
还是直接上一个例子说明(创建RC 和之前的一样,创建基于nginx的pod):

[root@cnyunwei kubernetes_data]# cat ng-cn-sr-port.yml
apiVersion: v1  
kind: Service  
metadata:  
  name: ng-svc
  labels:  
    name: ng-svc 
spec: 
  type: NodePort 
  ports:  
  - port: 30002
    targetPort: 80  
    protocol: TCP
    nodePort: 30002
  selector:  
    app: ng-rc

使用NodePort 模式,也就是外部能直接访问的模式需要定义type: NodePort
  nodePort: 30002 是实际提供外部访问的端口,默认端口是30000-32767 范围,为了避免混淆,建议把除targetPort 外的端口都设置为相同。
  查看Service 是否正确接管pod的网络服务可以使用命令:

[root@cnyunwei ~]# kubectl get endpoints
NAME         ENDPOINTS                           AGE
kubernetes   192.168.8.5:6443                    35d
ng-svc       172.17.1.3:80,172.17.13.3:80        1h

  可以看到ng-svc 这个Service 管理了两个pod,pod的端口为80,这就说明该Service 创建无误,如果ENDPOINTS 中并没有出现对应的pod信息就证明这个Service 的selector 可能配置有误,检查下定义的pod标签是否正确。
  查看下node节点上已经出现了30002端口的监听,确保服务器外部安全组等限制已经放行该端口,在本地访问测试一下。。。。。是不是出现了无法访问30002端口的情况?
  这就是之前说过的一个坑了,按照网上搜到的教程配置基本没看到要配置iptables相关的问题,然后查阅了不少资料才看到docker 1.13 版本对iptables的规则进行了改动,默认FORWARD 链的规则为DROP ,整个影响就是规则DROP后,不同主机间就不能正常通信了(kubernetes的网络使用flannel情况)。

  临时解决方法,在各个node节点上执行以下iptables命令,具体的原理在后面文章中讲解,这里先更改FORWARD 规则完成剩下的实验。

[root@cnyunwei_d1 ~]# iptables -P FORWARD ACCEPT

  下面在两台node上都更改了FORWARD 为ACCEPT ,本地访问node节点的IP和30002端口,终于看到nginx欢迎页出现了。

  重点来啦,为什么个人认为nodePort 更方便呢,上面的pod是两台node上都创建了一个,一共是两个nginx镜像的pod,现在我们设置该RC的pod数量为1

[root@cnyunwei ~]# kubectl scale rc ng-rc --replicas=1
replicationcontroller "ng-rc" scaled
[root@cnyunwei ~]# kubectl get pod -o wide
NAME          READY     STATUS    RESTARTS   AGE       IP            NODE
ng-rc-5bsd8   1/1       Running   0          3d        172.17.13.3   docker-002.cnyunwei.cc

  现在ng-rc 这个标签的pod已经从两个变成了一个,svc管理的后端pod也只剩下我node-02节点上的pod。

[root@cnyunwei ~]# kubectl get endpoints
NAME         ENDPOINTS                           AGE
kubernetes   192.168.8.5:6443                    36d
ng-svc       172.17.13.3:80                      18h

现在到node-01节点上看下,发现还是存在30002端口监听,监听程序为kube-proxy

[root@cnyunwei_d1 ~]# netstat -tunlp | grep 30002
tcp6       0      0 :::30002                :::*                    LISTEN      3824/kube-proxy     

  再次访问下node-01节点外网地址加30002端口,依然能访问到nginx欢迎页,同时node-02节点上也是正常访问nginx欢迎页。

  Service 的NodePort 模式,只要是同一个集群下所有node节点都会监听相同端口,无论访问哪个节点,kube-proxy 程序都会把数据转发到有pod监听的那台node上,个人认为在微服务框架下采用NodePort 模式配合内部DNS服务很合适,在DNS中将一个项目用域名方式配置,并且域名解析到所有的node节点,不管解析出来是哪个节点都可以保证各个服务之间相互调用成功。

转载请注明:菜鸟运维网 » kubernetes 1.5 配置(四)

喜欢 (2)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址