Kubernetes(九)—NodePort类型Service暴露应用

 

参考文档

在集群中暴露 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-nginxservice

在这里插入图片描述

可以看到又随机生成一个VIP,宿主机的代理端口为32747 所以NodePort类型在集群中的主机节点上为Service随机提供一个代理端口,以允许从主机网络上对Service进行访问。