将服务暴露给外部客户端 P136
有以下三种方式可以在外部访问服务:
- 将服务的类型设置成
NodePort
- 将服务的类型设置为
LoadBalance
- 创建一个
Ingress
资源
使用 NodePort
类型的服务 P137
通过创建一个 NodePort
服务,可以让 Kubernetes 在其所有节点上保留一个端口(所有节点上都使用相同端口号),并将传入的连接转发给作为服务部分的 pod 。 P137
创建 NodePort
类型的服务 P137
可以使用如下描述文件 kubia-svc-nodeport.yaml
创建一个 NodePort
类型的服务。
# 遵循 v1 版本的 Kubernetes API
apiVersion: v1
# 资源类型为 Service
kind: Service
metadata:
# Service 的名称
name: kubia-nodeport
spec:
# 指定服务类型为 NodePort
type: NodePort
# 该服务可用的端口
ports:
# 第一个可用端口的名字
- name: http
# 可用端口为 80
port: 80
# 服务将连接转发到容器的 8080 端口
targetPort: 8080
# 通过集群节点的 30000 端口可以访问该服务
nodePort: 30000
# 第二个可用端口的名字
- name: https
# 可用端口为 443
port: 443
# 服务将连接转发到容器的 8443 端口
targetPort: 8443
# 通过集群节点的 32767 端口可以访问该服务
nodePort: 32767
# 具有 app=kubia 标签的 pod 都属于该服务
selector:
app: kubia
nodePort
属性不是强制的,如果忽略就会随机选择一个端口。 P137
kubectl get services kubia-nodeport
: 查看该服务的基础信息
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubia-nodeport NodePort 10.111.59.156 <none> 80:30000/TCP,443:32767/TCP 2s
PORT(S)
列显示集群 IP 内部端口 (80, 443) 和节点端口 (30000, 32767) ,可通过 10.111.59.156:80
和 <any-node-ip>:30000
等访问服务。 P138
使用 JSONPath 输出需要的信息:通过指定 kubectl 的 JSONPath ,我们可以只输出需要的信息。例如: kubectl get nodes -o jsonpath='{.items[*].status.addresses[0].address}'
将输出所有节点的 IP 地址。
通过负载均衡器将服务暴露出来 P140
负载均衡器拥有自己独一无二的可公开访问的