在集群中暴露 Pod
创建pod
vim my-nginx.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-nginx
spec:
selector:
matchLabels:
run: my-nginx
replicas: 6
template:
metadata:
labels:
run: my-nginx
spec:
containers:
- name: my-nginx
image: nginx
ports:
- containerPort: 80
kubectl apply -f my-nginx.yaml
kubectl get pods -o wide
NodePort类型暴露Service
vim service.yaml
apiVersion: v1
kind: Service
metadata:
name: my-nginx
labels:
run: my-nginx
spec:
type: NodePort
ports:
- port: 8080
targetPort: 80
protocol: TCP
name: http
selector:
run: my-nginx
kubectl apply -f servcie.yaml
kubectl get service my-nginx
可以看到8080:31944
8080其实是k8s集群内部的一个VIP,做负载均衡
31944其实是宿主机master的端口
我们查看一下服务的详细信息
kubectl describe service my-nginx
所以说8080端口是VIP10.1.132.180的端口
我们进入容器内部把显示的页面更改,查看负载均衡的效果。
我们多次访问VIP的8080端口可以看到负载均衡效果
使用集群外的同网段机器访问宿主机的31944端口,可以看到负载均衡效果。
当然我们也可以使用命令暴露服务
kubectl delete service my-nginx
#先删除服务
kubectl expose deployment/my-nginx --type="NodePort" --port=8080 --target-port=80 --name=my-nginx
可以看到又随机生成一个VIP,宿主机的代理端口为32747
所以NodePort类型在集群中的主机节点上为Service随机提供一个代理端口,以允许从主机网络上对Service进行访问。