开发者学堂课程【Kubernetes 入门: Kubernets Service】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/51/detail/1020
Kubernets Service
内容介绍
一、上节回顾
二、需求来源
三、用例解读
四、操作演示
五、架构设计
一、上节回顾
1、Kubernetes Pod 网络的基本要素
Pod 有独立的网络空间和唯─地址
Pod 与 Pod,Node,外界网络互联互通
2、NetworkPolicy
控制 Pod 到 Pod,Node,外接网络的访问限制
二、需求来源
1、为什么需要服务发现
Kubernetes 应用应如何相互调用?
Pod 生命周期短暂,IP 地址随时变化
Deployment 等的 Pod 组需要统一访问入口和做负载均衡
应用间在不同环境部署时保持同样的部署拓扑和访问方式
应用服务如何暴露到外部访问和负载均衡?
2、Service: Kubernetes 中的服务发现与负载均衡
Service 向上提供外部网络和 PodA,外部网络和 PodA 会通过 Service 去访问,向下Service 对接另外一组 pod 可以通过 Kubernetes 一些方式去负载均衡到一组上面去。
三、用例解读
1、Service 语法
l 新知识点:
ports:定义服务发现的协议和端口
l 历史知识点回顾:
labels:标签
selector:选择器
apiVersion: v1 kind: Service metadata: name: my-service Service元信息 labels: app: my-servicespec: selector: Pod选择器 app: MyApp ports: - protocol: TCP 协议和端口 port: 80 targetPort: 9376 |
四、操作演示
1、创建和查看 Service
$ kubectl apply -f service.yaml service/my-service created |
$ kubectl describe service my-service |
l Name:my-service
l Namespace: default
l Labels:app=my-service
l Selector:app=MyApp
l Type:ClusterlP
l IP:172.29.3.27 集群内虚拟 IP
l Port:80/TCP
l TargetPort:9376/TCP
l Endpoints:192.168.115.236:9376,192.168.115.237:9376,192.168.115.243:9376(selector 匹配到的后端 Pod 地址)
l Session Affinity: None
2、集群内访问 Service
直接 Service 的虚拟 IP
kubectl get svc 可以查到
直接访问服务名,依靠 DNS 解析
同一个 Namespace 直接通过 servicename 访问
不同 Namespace 加上 namespace 名访问:
{servicename}.{namespace}
通过环境变量访问
MY_SERVICE_PORT_80_TCP=tcp://172.29.3.27:80 MY _SERVICE_SERVICE_HOST=172.29.3.27 MY_SERVICE_PORT=tcp://172.29.3.27:80 MY_SERVICE SERVICE PORT=80 MY_SERVICE_PORT_80_TCP_ADDR=172.29.3.27 MY_SERVICE_PORT_80_TCP_PORT=80 MY_SERVICE_PORT_80_TCP_PROTO=tcp |
3、Headless Service
Service 指定 clusterlP: None
Pod 通过 service_name 方式时直接解析到所有后端 Pod lP
客户端应用自主选择需要访问的 Pod
4、向集群外暴露 Service
l Service 类型
ClusterlP
ExternalName
l 向外暴露服务:
NodePort
LoadBalancer
五、架构设计
Kubernetes 服务发现架构
首先在 Kubernetes 的 master 节点和 worker 节点中,在 Kubernetes 的 master 节点中有 APIServer(统一管理)、Cloud Controller Manager(组件)、Coredns(观测配置变化),每个组件会有 Kube-Proxy 部署
后续进阶部分预告
l 深入讲解 Service 的实现原理
l Service 网络出现问题时的 Debug 技巧