概念:
Kubernetes 中 Service 是 将运行在一个或一组 Pod 上的网络应用程序公开为网络服务的方法。
服务类型:
可通过sepc.type属性设置服务类型
ClusterIP
通过集群的内部 IP 暴露服务,选择该值时服务只能够在集群内部访问。 这也是你没有为服务显式指定 type 时使用的默认值。 你可以使用 Ingress 或者 Gateway API 向公众暴露服务。
NodePort
通过每个节点上的 IP 和静态端口(NodePort)暴露服务。 为了让节点端口可用,Kubernetes 设置了集群 IP 地址,这等同于你请求 type: ClusterIP 的服务。
LoadBalancer
使用云提供商的负载均衡器向外部暴露服务。 Kubernetes 不直接提供负载均衡组件;你必须提供一个,或者将你的 Kubernetes 集群与云提供商集成。
ExternalName
将服务映射到 externalName 字段的内容(例如,映射到主名 api.foo.bar.example)。 该映射将集群的 DNS 服务器配置为返回具有该外部主机名值的 CNAME 记录。 无需创建任何类型代理。
Service和Endpoint 的区别
当创建service资源配置了selector时,endpoints 控制器会自动创建 endpoints 资源对象,该资源对象记录了 svc 和 pod 的一一对应关系。
demo
apiVersion: v1
kind: Service
metadata:
#指定service名称
name: my-nginx-service
#给service打上标签
labels:
app: nginx-svc
#指定名称空间
namespace: test
spec:
selector:
#指定服务类型,ClusterIP,NodePort,LoadBalancer,ExternalName (默认为ClusterIP,集群内部ip,仅集群内部访问)
type: ClusterIP
#通过标签选择pod
app: nginx
version: 1.17.1
ports:
- name: http
#协议类型支持TCP,UDP
protocol: TCP
#暴露的端口
port: 8888
#pod端口
targetPort: 80
- name: https
protocol: TCP
port: 4431
targetPort: 443
相关命令
#查看test名称空间下service
kubectl get svc -n [NameSpace]
#查看service的详细信息
kubectl describe svc [serviceName]