当前位置:   article > 正文

Service(ClusterIP)_service clusterip

service clusterip

简介

通过集群内部IP地址暴露服务,此地址仅在集群内部可达,而无法被集群外部的客户端访问

clusterIP 主要在每个 node 节点使用 iptables,将发向 clusterIP对应端口的数据,转发到 kube-proxy 中。然后 kube-proxy自己内部实现有负载均衡的方法,并可以查询到这个 service 下对应 pod的地址和端口,进而把数据转发给对应的 pod 的地址和端口

为了实现图上的功能,主要需要以下几个组件的协同工作:

1、apiserver:用户通过 kubectl命令向 apiserver发送创建 service的命令, apiserver接收到请求后将数据存储到 etcd中

2、kube-proxy: Kubernetes的每个节点中都有一个叫做 kube-porxy的进程,这个进程负责感知 service、 pod的变化,并将变化的信息写入本地的 iptables规则中

3、iptables:使用 NAT等技术将 virtualIP的流量转至 endpoint中

操作实践

创建deployment资源

  1. # cat myapp-deployment.yaml
  2. apiVersion: apps/v1
  3. kind: Deployment
  4. metadata:
  5. name: myapp-deploy
  6. namespace: default
  7. spec:
  8. replicas: 3
  9. selector:
  10. matchLabels:
  11. app: myapp
  12. template:
  13. metadata:
  14. labels:
  15. app: myapp
  16. spec:
  17. containers:
  18. - name: myapp
  19. image: nginx
  20. ports:
  21. - containerPort: 80
  22. name: http

创建ClusterIP资源

  1. # cat svc.yaml
  2. apiVersion: v1
  3. kind: Service
  4. metadata:
  5. name: myapp
  6. spec:
  7. type: ClusterIP # 类型设置为ClusterIP
  8. selector:
  9. app: myapp # 标签选择器,匹配deployment资源
  10. ports:
  11. - name: http
  12. port: 80 # service端口
  13. protocol: TCP # 协议
  14. targetPort: 80 # deployment资源端口

查看service信息

  1. [root@k8s-master service]# kubectl get svc
  2. NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
  3. kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 20d
  4. myapp ClusterIP 10.100.144.143 <none> 80/TCP 9m21s
  5. nginx-svc-nodeport NodePort 10.99.24.165 <none> 80:30080/TCP 2d

访问验证

  1. [root@k8s-master service]# curl 10.100.144.143
  2. <!DOCTYPE html>
  3. <html>
  4. <head>
  5. <title>Welcome to nginx!</title>

结果分析

查看pod ip信息,可以发现,endpoints的ip端口信息与pod的ip端口信息完全一致

  • 查看kube-proxy,查看ipvs规则,可以发现,ipvs规则与pod的ip和端口完全一致

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/酷酷是懒虫/article/detail/764469
推荐阅读
相关标签
  

闽ICP备14008679号