image.png

有几种方式可以在外部访问服务:

image.png

5.3.1 使用 NodePort 类型的服务

NodePort service 可以让 Kubernetes 在所有节点上保留一个端口, 并将传入的连接转发给 pod.

创建 NodePort 类型的服务

默认情况下 type = ClusterIP, 只能内部访问

image.png

查看 NodePort 类型的服务

  1. $ kubectl get svc hello-svc2
  2. NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
  3. hello-svc2 NodePort 10.98.169.210 <none> 80:30000/TCP 46s

image.png

访问服务的方式:

image.png

节点上可能没有被调度 pod.

image.png

从某个节点来的外部连接不一定调用该节点的 pod.

更改防火墙规则, 让外部客户端访问我们的 NodePort 服务

云平台的配置.

5.3.2 通过负载均衡器将服务暴露出来

image.png

创建 LoadBalance 服务

image.png

通过负载均衡器连接服务

查看, EXTERNAL-IP:

  1. $ kubectl get svc hello-lb
  2. NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
  3. hello-lb LoadBalancer 10.111.52.50 <pending> 80:30170/TCP 3m17s

image.png

image.png

注意:

image.png

5.3.3 了解外部连接的特性

了解并防止不必要的网络跳数

不使用内部重定向 (该节点没有指定 pod)

  • spec.externalTrafficPolicy 字段
  • 没有指定 pod 的节点, 该连接被挂起

image.png

image.png

记住客户端 IP 是不记录的

  • 源网络地址转换 (SNAT)
  • local 策略可以保留客户端 IP