从集群外部访问Service

设置nodePort映射到物理机,同时设置Service的类型为NodePort

service-nodeport.yaml
apiVersion: v1
kind: Service
metadata:
  name: webapp
spec:
  type: NodePort
  ports:
  - port: 8080
    targetPort: 8080
    nodePort: 32767
  selector:
    app: webapp
$ kubectl get svc webapp
NAME     TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
webapp   NodePort   10.100.131.83   <none>        8080:32767/TCP   26s

如果将Service的type字段设置为NodePort,则Kubernetes将从--service-nodeport-range参数指定的范围(默认为30000~32767)中自动分配端口,也可以手动指定NodePort,创建该Service后,集群每个节点都将暴露一个端口,通过某个宿主机的IP+端口即可访问后端的应用,也可以前端采用一个反代服务器代理至多个Node节点+端口,防止单个Node节点故障引起的服务不可用。

对该Service的访问也将被负载分发到后端的多个Pod上

设置LoadBalancer映射到云服务商提供的LoadBalancer地址

这种用法仅用于在公有云服务提供商的云平台上设置Service的场景。

service-cloud.yaml

在下面的例子中,status.loadBalancer.ingress.ip设置的146.148.47.155为云服务商提供的负载均衡器的IP地址。对该Service的访问请求将会通过LoadBalancer转发到后端Pod上,负载分发的实现方式则依赖于云服务商提供的LoadBalancer的实现机制:

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

最后更新于