关于k8s 使用 Service 控制器对外暴露服务的问题

Service 引入主要是解决 Pod 的动态变化,提供统一访问入口:

  1. 防止 Pod 失联,准备找到提供同一个服务的 Pod (服务发现) 
  2. 定义一组 Pod 的访问策略 (负载均衡)

部署 deploy

kubectl apply -f deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: chiyi-nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: chiyi-nginx
  template:
    metadata:
      labels:
        app: chiyi-nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80

部署 service

kubectl apply -f service.yaml
apiVersion: v1
kind: Service
metadata:
  name: chiyi-nginx
spec:
  selector:
    app: chiyi-nginx
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
      nodePort: 30002
  type: NodePort

查看 service 和 pod 的关系

kubectl  get ep
curl 10.244.1.58:80

说明:

Service 通过标签关联一组 Pod

Service 为一组 Pod 提供负载均衡能力

[root@k8s-master service]# kubectl get ep
NAME          ENDPOINTS                                      AGE
chiyi-nginx   10.244.1.58:80,10.244.1.59:80,10.244.2.46:80   5m19s
kubernetes    172.17.28.225:6443                             23h
[root@k8s-master service]# curl 10.244.1.58:80



Welcome to nginx!



Welcome to nginx!

If you see this page, the nginx web server is successfully installed and working. Further configuration is required.

For online documentation and support please refer to nginx.org.
Commercial support is available at nginx.com.

Thank you for using nginx.

查看 service

kubectl  get service
curl 10.101.104.218
[root@k8s-master service]# kubectl get service
NAME          TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
chiyi-nginx   NodePort    10.101.104.218           80:30002/TCP   6m3s
kubernetes    ClusterIP   10.96.0.1                443/TCP        23h
[root@k8s-master service]# curl 10.101.104.218



Welcome to nginx!



Welcome to nginx!

If you see this page, the nginx web server is successfully installed and working. Further configuration is required.

For online documentation and support please refer to nginx.org.
Commercial support is available at nginx.com.

Thank you for using nginx.

查看端口

ss -antp |grep 30002
[root@k8s-master service]# ss -antp |grep 30002
LISTEN     0      128          *:30002                    *:*                   users:(("kube-proxy",pid=3544,fd=13))

导出 yaml

kubectl  get service chiyi-nginx -o yaml

筛选 service 关联 pod

kubectl get pods -l app=chiyi-nginx
[root@k8s-master service]# kubectl get pods -l app=chiyi-nginx
NAME                           READY   STATUS    RESTARTS   AGE
chiyi-nginx-5bbf8bff4b-6bwfz   1/1     Running   0          3m58s
chiyi-nginx-5bbf8bff4b-bpvvc   1/1     Running   0          3m58s
chiyi-nginx-5bbf8bff4b-pwwt4   1/1     Running   0          3m58s

扩容测试

kubectl scale deployment chiyi-nginx --replicas=1
kubectl  get service,pods,ep

Service 三种常用类型

  • ClusterIP 集群内部使用,任一节点服务器和 pod 内部都可以访问
  • NodePort 对外暴露应用(端口默认范围:30000-32767),任一节点服务器公网IP+端口号,可在浏览器访问。
  • LoadBalancer 对外暴露应用,适合公有云

到此这篇关于k8s 使用 Service 控制器对外暴露服务的文章就介绍到这了,更多相关k8s对外暴露服务内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

你可能感兴趣的:(关于k8s 使用 Service 控制器对外暴露服务的问题)