1、Kubernetes service
服务可以定义为一组分组的逻辑集合。它可以被定义为pod顶部的一个抽象,它提供了一个IP地址和DNS名称,通过这个名称可以访问pod。使用Service,可以很容易地管理负载均衡配置。它帮助pod很容易扩缩容。
service是Kubernetes中的一个REST对象,它的定义可以发布到Kubernetes主服务器上的Kubernetes apiServer来创建一个新实例。
2、创建service(服务)
1)没有选择器service
创建一个名为不使用selector的cjavapy_service的服务。
apiVersion: v1 kind: Service metadata: name: cjavapy_service spec: ports: - port: 8080 targetPort: 31999
2)使用selector的服务配置文件
apiVersion: v1 kind: Service metadata: name: cjavapy_service spec: selector: application: "My Application" ports: - port: 8080 targetPort: 31999
需要手动创建一个endpoint,
apiVersion: v1 kind: Endpoints metadata: name: Tutorial_point_service subnets: address: "ip": "192.168.31.41" ports: - port: 8080
创建了一个endpoint,将流量路由到定义为“192.168.168.40:8080”的endpoint。
3)多端口服务
对于某些服务,你需要公开多个端口。 Kubernetes 允许你在 Service 对象上配置多个端口定义。 为服务使用多个端口时,必须提供所有端口名称,以使它们无歧义。
apiVersion: v1 kind: Service metadata: name: Tutorial_point_service spec: selector: application: “My Application” -------------------> (Selector) ClusterIP: 10.3.0.12 ports: -name: http protocol: TCP port: 80 targetPort: 31999 -name:https Protocol: TCP Port: 443 targetPort: 31998
3、服务类型
ClusterIP:用于限制集群内的服务。它在定义的Kubernetes集群中公开服务。
spec: type: NodePort ports: - port: 8080 nodePort: 31999 name: NodeportService
NodePort:将在已部署节点的静态端口上公开服务。系统将自动创建一个ClusterIP服务,NodePort服务将路由到该服务。该服务可以在集群外通过NodeIP:nodePort访问。
spec: ports: - port: 8080 nodePort: 31999 name: NodeportService clusterIP: 10.20.30.40
LoadBalancer:使使用云提供商的负载均衡器向外部暴露服务。 外部负载均衡器可以将流量路由到自动创建的 NodePort 服务和 ClusterIP 服务上。
{ "kind": "Service", "apiVersion": "v1", "metadata": { "name": "my-service" }, "spec": { "selector": { "app": "MyApp" }, "ports": [ { "protocol": "TCP", "port": 80, "targetPort": 9376, "nodePort": 30061 } ], "clusterIP": "10.0.171.239", "loadBalancerIP": "78.11.24.19", "type": "LoadBalancer" }, "status": { "loadBalancer": { "ingress": [ { "ip": "146.148.47.155" } ] } }
ExternalName:通过返回 CNAME 和对应值,可以将服务映射到 externalName 字段的内容(例如,foo.bar.example.com)。 无需创建任何类型代理。类型为 ExternalName 的服务将服务映射到 DNS 名称,而不是典型的选择器,需要使用 kube-dns 1.7 及以上版本或者 CoreDNS 0.0.8 及以上版本才能使用 ExternalName 类型。
apiVersion: v1 kind: Service metadata: name: my-service namespace: prod spec: type: ExternalName externalName: my.database.example.com
externalIPs:如果外部的 IP 路由到集群中一个或多个 Node 上,Kubernetes Service 会被暴露给这些 externalIPs。 通过外部 IP(作为目的 IP 地址)进入到集群,打到 Service 的端口上的流量, 将会被路由到 Service 的 Endpoint 上。 externalIPs 不会被 Kubernetes 管理,它属于集群管理员的职责范畴。
根据 Service 的规定,externalIPs 可以同任意的 ServiceType 来一起指定。
apiVersion: v1 kind: Service metadata: name: my-service spec: selector: app: MyApp ports: - name: http protocol: TCP port: 80 targetPort: 9376 externalIPs: - 80.11.12.10