通过nodePort,对外暴露k8s集群服务
1. 原理有时,我们需要向外部暴露一些k8s集群的服务。这时,我们可以指定service的port类型为nodePort来实现。例如k8s集群中有三个node节点:192.168.0.1192.168.0.2192.168.0.3则我们可以通过192.168.0.1:nodePort(也可以是192.168.0.2:nodePort,192.168.0.3:nodePort)访...
·
1. 原理
有时,我们需要向外部暴露一些k8s集群的服务。这时,我们可以指定service
的port
类型为nodePort
来实现。例如k8s集群中有三个node节点:
- 192.168.0.1
- 192.168.0.2
- 192.168.0.3
则我们可以通过192.168.0.1:nodePort
(也可以是192.168.0.2:nodePort
,192.168.0.3:nodePort
)访问k8s集群内部的服务。
默认的nodePort的范围是30000-32767
, k8s会从中随机选择一个端口,我们也可以在spec.ports.nodePort
中指定一个端口。
当然,我们可以修改apiserver的启动参数 --service-node-port-range
来指定nodePort范围,如:--service-node-port-range 8000-9000
2. 实现
我们需要在service的yaml定义中指定nodePort:
kind: Service
apiVersion: v1
metadata:
name: my-service
spec:
type: NodePort // 指定service类型
selector:
app: forme
ports:
- port: 80 // 供集群中其它服务访问的端口
targetPort: 8020 // 后端pod中container暴露的端口
nodePort: 9000 // 节点暴露的端口
---
apiVersion: v1
kind: ReplicationController
metadata:
name: forme
namespace: default
spec:
replicas: 1
selector:
app: forme
template:
metadata:
name: forme
labels:
app: forme
spec:
volumes:
- name: "config"
hostPath:
path: "/data/xxx"
containers:
- name: forme
image: forme:k8s
#command: ["/bin/sh", "-c"]
#args: ["tail -f /dev/null"]
#args: ["sleep 20"]
resources:
limits:
alpha.kubernetes.io/nvidia-gpu: 1
#cpu: 8
#memory: 4Gi
ports:
- containerPort: 8020 // 该container监听的端口
volumeMounts:
- name: "config"
mountPath: "/home/docker/code"
3. 验证
当服务启动以后,我们可以通过
# lsof -i:9000
查看端口情况。如果端口已经打开,但是其他节点无法访问,要查看防火墙设置,关闭防火墙即可。
4. 参考文章
更多推荐
已为社区贡献15条内容
所有评论(0)