7. kubernetes资源——service服务

kubernetes资源------service服务

一、service是什么

业务的访问入口, 类似于反向代理的作用

同时带有负载均衡

通过标签选择器在service和后端的pod间建立对应关系

复制代码
[root@k8s-master ~]# kubectl get svc -A
NAMESPACE     NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)                  AGE
default       kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP                  122d
kube-system   kube-dns     ClusterIP   10.96.0.10   <none>        53/UDP,53/TCP,9153/TCP   122d

1、服务的命名格式

服务名称.命名空间.svc.域名

示例: 在web命名空间,服务名称test-service

test-service.web.svc.cluster.local

支持简写

2、服务发现

在k8s集群中创建服务时,会自动联系kube-dns服务注册自己的名称、IP的对应关系(A记录)

在k8s集群中创建pod时,k8s会自动将kube-dns服务的地址分配给对应的POD

3、服务类型

  • ClusterIP

    默认的服务类型

    该服务只能在k8s集群内部被访问

  • NodePort

    用于发布服务,暴露端口

  • LoadBalance

    用于发布服务

    只能在云平台使用,配合云上的负载均衡器使用

二、clusterIP类型服务

  • 仅允许集群内部访问

1、创建服务

复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
    name: test1-nginx
spec:
    replicas: 2
    selector:
        matchLabels:
            app: nginx
    template:
        metadata:
            labels:
                app: nginx
        spec:
            containers:
            - name: test1-nginx
              image: nginx:1.16
              imagePullPolicy: IfNotPresent
---
apiVersion: v1
kind: Service
metadata:
    name: test1-nginx
spec:
    ports:
    - port: 80
    selector:
        app: nginx
复制代码
[root@k8s-master svcTest]# kubectl get pod 
NAME                           READY   STATUS    RESTARTS   AGE
test1-nginx-5d858b7fc5-nw7zp   1/1     Running   0          20s
test1-nginx-5d858b7fc5-t75r5   1/1     Running   0          20s
复制代码
[root@k8s-master svcTest]# kubectl get svc 
NAME          TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE
kubernetes    ClusterIP   10.96.0.1       <none>        443/TCP   122d
test1-nginx   ClusterIP   10.96.251.208   <none>        80/TCP    31s

2、创建客户端POD,测试访问服务

复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
    name: client
spec:
    replicas: 1
    selector:
        matchLabels:
            app: client
    template:
        metadata:
            labels:
                app: client
        spec:
            containers:
            - name: client
              image: centos:7
              imagePullPolicy: IfNotPresent
              command:
              - sleep
              - "36000"

测试服务可正常访问

复制代码
[root@k8s-master svcTest]# kubectl exec -ti client-5cb5995997-qgqk4 bash

// 查看pod分配 的DNS服务器地址
[root@client-5cb5995997-qgqk4 ~]# cat /etc/resolv.conf 
search default.svc.cluster.local svc.cluster.local cluster.local linux.com
nameserver 10.96.0.10
options ndots:5

[root@client-5cb5995997-qgqk4 ~]# ping test1-nginx 
PING test1-nginx.default.svc.cluster.local (10.96.251.208) 56(84) bytes of data.


[root@client-5cb5995997-qgqk4 ~]# curl test1-nginx
[root@client-5cb5995997-qgqk4 ~]# curl test1-nginx.default.svc.cluster.local
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>
[root@client-5cb5995997-qgqk4 ~]# 

测试service负载均衡

复制代码
[root@k8s-master svcTest]# kubectl exec -ti test1-nginx-5d858b7fc5-nw7zp bash
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
root@test1-nginx-5d858b7fc5-nw7zp:/# 
root@test1-nginx-5d858b7fc5-nw7zp:/# echo "123" > /usr/share/nginx/html/index.html 
root@test1-nginx-5d858b7fc5-nw7zp:/# exit
exit
[root@k8s-master svcTest]# 
[root@k8s-master svcTest]# kubectl exec -ti test1-nginx-5d858b7fc5-t75r5 bash
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
root@test1-nginx-5d858b7fc5-t75r5:/# echo "456" > /usr/share/nginx/html/index.html 
root@test1-nginx-5d858b7fc5-t75r5:/# exit
exit
[root@k8s-master svcTest]# 
[root@k8s-master svcTest]# kubectl exec -ti client-5cb5995997-qgqk4 bash
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
[root@client-5cb5995997-qgqk4 /]# 
[root@client-5cb5995997-qgqk4 /]# curl test1-nginx
123
[root@client-5cb5995997-qgqk4 /]# curl test1-nginx
456

三、NodePort类型服务

将k8s集群中的服务发布出去,客户端借助物理机可以访问

复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
    name: test2-nginx
spec:
    replicas: 2
    selector:
        matchLabels:
            app: nginx2
    template:
        metadata:
            labels:
                app: nginx2
        spec:
            containers:
            - name: test2-nginx
              image: nginx:1.16
              imagePullPolicy: IfNotPresent
---
apiVersion: v1
kind: Service
metadata:
    name: test2-nginx
spec:
    type: NodePort
    ports:
    - port: 80
      nodePort: 30000                 // 端口范围:30000-32767
    selector:
        app: nginx2
复制代码
[root@k8s-master svcTest]# kubectl get pod 
NAME                           READY   STATUS    RESTARTS   AGE
test2-nginx-569d77d6cb-2bh99   1/1     Running   0          89s
test2-nginx-569d77d6cb-tqtgw   1/1     Running   0          89s

[root@k8s-master svcTest]# kubectl get svc 
NAME          TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
kubernetes    ClusterIP   10.96.0.1      <none>        443/TCP        123d
test2-nginx   NodePort    10.96.55.131   <none>        80:30000/TCP   45s

测试访问

  • kubeadm部署的集群

    可以通过集群中任意节点的IP访问服务

  • 二进制方式部署的集群

    通过查看pod所在的物理机访问服务

相关推荐
江畔何人初8 小时前
pod的定义以及创建过程
linux·运维·云原生
等什么君!9 小时前
docker -数据卷技术
运维·docker·容器
花酒锄作田10 小时前
Debian 13基于kubeadm和containerd部署单节点kubernetes
kubernetes·containerd·cilium
上天_去_做颗惺星 EVE_BLUE10 小时前
Docker高效使用指南:从基础到实战模板
开发语言·ubuntu·docker·容器·mac·虚拟环境
Gary董12 小时前
高并发的微服务架构如何设计
微服务·云原生·架构
东哥爱编程12 小时前
使用Runpod进行gpu serverless推理
云原生·serverless
好好沉淀12 小时前
Docker开发笔记(详解)
运维·docker·容器
Ankie Wan13 小时前
cgroup(Control Group)是 Linux 内核提供的一种机制,用来“控制、限制、隔离、统计”进程对系统资源的使用。
linux·容器·cgroup·lxc
lcx_defender15 小时前
【Docker】Docker部署运行nacos
运维·docker·容器
啦啦啦小石头15 小时前
docker添加用户权限不使用sudo
运维·docker·容器