1.新建一个Deployment资源
kubectl create deployment my-nginx --image=nginx --replicas=3
这种写法是一种简单的写法,也可以通过编写一个my-nginx.deployment的方式实现
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-nginx
spec:
replicas: 3
selector:
matchLabels:
app: my-nginx
template:
metadata:
labels:
app: my-nginx
spec:
containers:
- name: nginx
image: nginx
2.将逻辑资源绑定到物理资源
kubectl apply -f my-nginx.deployment
k get pods -A -o wide #查看Pod的IP地址
curl http://IP:80 #因为Nginx默认的端口是80,使用Pod的IP+Nginx的端口可以访问
结果如下:
3.改用Service(nginx-service.yaml)
apiVersion: v1
kind: Service
metadata:
creationTimestamp: "2025-03-01T13:05:39Z"
labels:
app: my-nginx
name: nginx-service
namespace: default
resourceVersion: "15021"
uid: 1ce01f2a-5d49-4e38-a14c-65bf3e64f06d
spec:
clusterIP: 10.103.85.53
clusterIPs:
- 10.103.85.53
internalTrafficPolicy: Cluster
ipFamilies:
- IPv4
ipFamilyPolicy: SingleStack
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
app: my-nginx
sessionAffinity: None
type: ClusterIP
status:
loadBalancer: {}
值得注意的是这时候k8s会为Service分配一个ClusterIP,只允许本集群内部进行访问,如下图所示,同时从图中可以看出使用curl http://ClusterIP:80 的方式可以访问Nginx服务
4.改用Service的NodePort方式
apiVersion: v1
kind: Service
metadata:
creationTimestamp: "2025-03-01T13:05:39Z"
labels:
app: my-nginx
name: nginx-service
namespace: default
resourceVersion: "15021"
uid: 1ce01f2a-5d49-4e38-a14c-65bf3e64f06d
spec:
clusterIP: 10.103.85.53
clusterIPs:
- 10.103.85.53
internalTrafficPolicy: Cluster
ipFamilies:
- IPv4
ipFamilyPolicy: SingleStack
ports:
- port: 80
protocol: TCP
nodePort: 32689 #节点端口,会在每个节点含master、node节点都启动该端口,如果不写默认随机生成端口,NodePort端口范围只允许30000-32767
targetPort: 80
selector:
app: my-nginx
sessionAffinity: None
type: NodePort #注意这行的修改
status:
loadBalancer: {}
这个时候除了集群内部,外部的主机也可以进行访问了,使用 http://主机IP:nodePort 进行访问,我使用的是云服务器,这里的IP需要使用ssh可以远程登录的那个。在我自己的主机的浏览器上可以进行访问,见下图。
参考文章:service资源讲解、修改nodeport类型的service暴露端口范围-CSDN博客
作者:MssGuo