赞
踩
通过集群内部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资源
- # cat myapp-deployment.yaml
- apiVersion: apps/v1
- kind: Deployment
- metadata:
- name: myapp-deploy
- namespace: default
- spec:
- replicas: 3
- selector:
- matchLabels:
- app: myapp
- template:
- metadata:
- labels:
- app: myapp
- spec:
- containers:
- - name: myapp
- image: nginx
- ports:
- - containerPort: 80
- name: http
创建ClusterIP资源
- # cat svc.yaml
- apiVersion: v1
- kind: Service
- metadata:
- name: myapp
- spec:
- type: ClusterIP # 类型设置为ClusterIP
- selector:
- app: myapp # 标签选择器,匹配deployment资源
- ports:
- - name: http
- port: 80 # service端口
- protocol: TCP # 协议
- targetPort: 80 # deployment资源端口
查看service信息
- [root@k8s-master service]# kubectl get svc
- NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
- kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 20d
- myapp ClusterIP 10.100.144.143 <none> 80/TCP 9m21s
- nginx-svc-nodeport NodePort 10.99.24.165 <none> 80:30080/TCP 2d
访问验证
- [root@k8s-master service]# curl 10.100.144.143
- <!DOCTYPE html>
- <html>
- <head>
- <title>Welcome to nginx!</title>
查看pod ip信息,可以发现,endpoints的ip端口信息与pod的ip端口信息完全一致
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。