首页 > 其他分享 >k8s--service详解

k8s--service详解

时间:2024-05-31 17:36:12浏览次数:19  
标签:ingress service -- nginx 80 k8s root pod

1:service详解

1、每次访问pod的时候,ip地址都不是固定的

2、service有一个虚拟ip和端口,可以使用这个来进行访问

3、kube-proxy,api server将service的信息存入到etcd中,kube-proxy将其转换为一个访问规则,这个就是本质

4、表象,就是标签,本质就是规则,通过标签,来进行要管理哪些pod,

5、访问pod里面的容器的时候,是根据轮询的状态,可以设置session亲和性来进行设置,将多个请求转发到一个pod里面的容器上

img
img

环境准备

apiVersion: apps/v1
kind: Deployment
metadata:
   name: pc-deployment
   namespace: dev
spec:
   replicas: 3
   selector:
       matchLabels:
          app: nginx-pod
   template:
       metadata:
         labels:
           app: nginx-pod
       spec:
          containers:
          - name: nginx
            image: nginx:1.17.1
            ports:
            - containerPort: 80
#将网页内容进行更改
root@pc-deployment-5cb65f68db-fxlpt:/usr/share/nginx/html# ls
50x.html  index.html
root@pc-deployment-5cb65f68db-fxlpt:/usr/share/nginx/html# echo 10.244.2.48 > index.html 

1、ClusterIP

集群内部进行访问pod,虚拟端口和虚拟ip
[root@master service]# cat clusterip.yaml 
apiVersion: v1
kind: Service
metadata:
   name: svc1
   namespace: dev
spec:
  selector:
    app: nginx-pod
  clusterIP: 10.96.0.100  #不写的话默认生成一个ip,可以为None,只能通过域名来进行访问
  type: ClusterIP 
  ports:
    - port: 8080  #svc的端口
      targetPort: 80

[root@master service]# kubectl describe svc -n dev svc1 
Name:              svc1
Namespace:         dev
Labels:            <none>
Annotations:       <none>
Selector:          app=nginx-pod
Type:              ClusterIP
IP Family Policy:  SingleStack
IP Families:       IPv4
IP:                10.96.0.100
IPs:               10.96.0.100
Port:              <unset>  8080/TCP
TargetPort:        80/TCP
Endpoints:         10.244.1.67:80,10.244.1.68:80,10.244.2.48:80  #这个便是建立的联系
Session Affinity:  None
Events:            <none>

#查看ipvsadm的信息
CP  10.96.0.100:8080 rr
  -> 10.244.1.67:80               Masq    1      0          0         
  -> 10.244.1.68:80               Masq    1      0          0         
  -> 10.244.2.48:80               Masq    1      0          0   

2、headliness

clusterip 默认是随机的负载均衡分发策略,这个类型的不会分发clusterip,只能通过域名来进行控制访问


3、NodePort

就是将svc的port映射到node节点上面,通过nodeip+端口来实现访问,占用了主机的一个端口
apiVersion: v1
kind: Service
metadata:
  name: svc2
  namespace: dev
spec:
  selector:
     app: nginx-pod
  type: NodePort
  ports:
  - port: 80
    targetPort: 80
    nodePort: 30002

#查看svc信息
[root@master service]# kubectl get svc -n dev
NAME    TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
nginx   NodePort    10.96.20.47     <none>        80:30528/TCP   89m
svc1    ClusterIP   10.96.0.100     <none>        8080/TCP       34m
svc2    NodePort    10.96.139.188   <none>        80:30002/TCP   2m4s

#访问服务
[root@master service]# curl 10.104.43.43:30002
10.244.1.67
[root@master service]# curl 10.104.43.43:30002
10.244.2.48

4、LoadBalancer

5、ExternalName

6、Ingress

1、因为nodeport会占用主机上面的一个端口,因此的话很多服务的话,1就浪费了大量的端口

2、使用ingress服务
就是通过域名来进行转发到对应的service上面,实现访问

img
img

环境准备
#下载ingress软件
wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.8.2/deploy/static/provider/cloud/deploy.yaml

#更换第一个源的地址
registry.cn-hangzhou.aliyuncs.com/google_containers/nginx-ingress-controller:v1.1.0
#后面2哥源的地址
registry.cn-hangzhou.aliyuncs.com/google_containers/kube-webhook-certgen:v1.1.1


#查看ingress
[root@master service]# kubectl get pod -n ingress-nginx 
NAME                                        READY   STATUS      RESTARTS   AGE
ingress-nginx-admission-create-q984g        0/1     Completed   0          49m
ingress-nginx-admission-patch-twmqm         0/1     Completed   1          49m
ingress-nginx-controller-6f4d47c657-bv8qx   1/1     Running     0          49m
[root@master service]# kubectl get svc -n ingress-nginx 
NAME                                 TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                      AGE
ingress-nginx-controller             NodePort    10.96.70.212    <none>        80:30906/TCP,443:30339/TCP   49m
ingress-nginx-controller-admission   ClusterIP   10.107.42.140   <none>        443/TCP                      49m

#安装6个pod,2个服务
[root@master service]# cat exampl.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
   name: pc-deployment
   namespace: dev
spec:
   replicas: 3
   selector:
       matchLabels:
          app: nginx-pod
   template:
       metadata:
         labels:
           app: nginx-pod
       spec:
          containers:
          - name: nginx
            image: nginx:1.17.1
            ports:
            - containerPort: 80

---
apiVersion: apps/v1
kind: Deployment
metadata:
   name: tomcat-deployment
   namespace: dev
spec:
   replicas: 3
   selector:
      matchLabels:
       app: t1 
   template:
      metadata:
         labels:
           app: t1
      spec:
        containers:
        - name: tomcat
          image: tomcat:8.5-jre10-slim
          ports:
          - containerPort: 8080

---
apiVersion: v1
kind: Service
metadata:
   name: nginx-service
   namespace: dev
spec:
   selector:
     app: nginx-pod
   clusterIP: None
   type: ClusterIP
   ports:
   - port: 80
     targetPort: 80

---
apiVersion: v1
kind: Service
metadata:
   name: tomcat-service
   namespace: dev
spec:
   selector:
     app: t1 
   type: ClusterIP
   clusterIP: None
   ports:
   - port: 8080
     targetPort: 8080


[root@master service]# cat i.yaml 
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-http
  namespace: dev
  annotations:
     nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  ingressClassName: nginx  #这个ingress由nginx来进行处理
  rules:  #定义一组的规则
  - host: nginx.com
    http:
      paths:
      - pathType: Prefix   #表示路径匹配是基于前缀的
        path: /app  #表示匹配所有以/开头的路径
        backend:  #指定了请求转发到后端服务
          service:
            name: nginx-service
            port:
              number: 80   #后端服务监听的端口
  - host: tomcat.com
    http:
      paths:
      - pathType: Prefix
        path: /
        backend:
          service:
            name: tomcat-service
            port:
              number: 8080

#域名解析
[root@master service]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
10.104.43.43 master
10.104.43.93 node1
10.104.43.126 node2
10.104.43.43 nginx.com
10.104.43.43 tomcat.com

#进行访问
[root@master service]# kubectl get svc -n ingress-nginx 
NAME                                 TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                      AGE
ingress-nginx-controller             NodePort    10.96.70.212    <none>        80:30906/TCP,443:30339/TCP   51m
ingress-nginx-controller-admission   ClusterIP   10.107.42.140   <none>        443/TCP                      51m
[root@master service]# curl nginx.com:30906/app
<!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@master service]# curl tomcat.com:30906



<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8" />
        <title>Apache Tomcat/8.5.35</title>
        <link href="favicon.ico" rel="icon" type="image/x-icon" />
        <link href="favicon.ico" rel="shortcut icon" type="image/x-icon" />
        <link href="tomcat.css" rel="stylesheet" type="text/css" />
    </head>

标签:ingress,service,--,nginx,80,k8s,root,pod
From: https://www.cnblogs.com/qw77/p/18217298

相关文章

  • pwn学习-ret2plt
    在之前进行ret2shellcode的学习时,需要NX保护机制是关闭的,但是现在一般情况下,保护机制默认都是开启的,那么该怎么办呢?下面我们将学习ret2plt技术,够着ROPChain来执行我们想要的代码ret2plt这种技术的目的是从PLT中泄漏函数的地址,例如二进制程序中有一个system或其他危险函数的......
  • linux 快速部署jar 并加入开机自启(超方便)
    第一步cd/etc/systemd/system/第二步创建app.service可以在本地创建好在传到/etc/systemd/system/目录下/usr/bin/java需要改成自己的java环境对应地址/srv/sites/app.jar改为自己jar存放包地址[Unit]Description=appserviceAfter=syslog.target[Service]Type......
  • 工程管理软件哪个好?2024年10个最佳工程管理软件
    本文将分享10款工程管理软件:PingCode、Worktile、Wrike、Asana、Monday.com、AdobeWorkfront、Smartsheet、Jira、ClickUp、MicrosoftProject。在高速发展的建筑和工程行业,管理复杂的项目要求极高的精确性和效率。工程管理软件在这一领域发挥着至关重要的作用,它通过提供详细......
  • datasets for stereo depth
    CREdateset#0,1,2,3https://data.megengine.org.cn/research/crestereo/dataset/tree/0.tarhttps://data.megengine.org.cn/research/crestereo/dataset/shapenet/0.tarhttps://data.megengine.org.cn/research/crestereo/dataset/reflective/0.tarhttps://data.megen......
  • 社区来稿|眼手交互能定义下一代人机交互范式吗?
    以下文章来源于XR交互技术观察,作者Eis4TY 前面的话: 推荐一篇来自Rokid产品经理Eis4TY的文章。文章探讨了眼手交互技术的原理、应用现状以及未来的发展趋势。作者提出:「在XR设备上,眼手交互不是最终答案,而是多模态混合交互的起点。」 也推荐你关注Eis4TY出品的「X......
  • 网络信息安全专业毕业找工作岗位有哪些?快来看
    前言渗透测试工程师:主要负责通过模拟黑客来对网站进行一个由头至尾的检测,在系统中发现和挖掘存在的漏洞,可以通过社工、网络扫描和密码破解、手工测试等手段进行测试,并最终出具一份渗透测试报告交予甲方网络运维者进行修补发现的漏洞。安全服务工程师:相对于其他安全工作......
  • 第2讲:static用法总结
    几句话总结static的用法。1、静态变量(1)静态变量统一放在特定内存区域中,在程序的整个生命周期内只有一份,所以函数在使用时共用静态变量的状态。(2)类中的静态变量为类的所有对象共享,而且不能在类内初始化静态变量。原因:每个对象是独立的,如果可以通过对象的方式初始化静态变......
  • L2-043 龙龙送外卖(C++, 记忆化搜索)
    龙龙是“饱了呀”外卖软件的注册骑手,负责送帕特小区的外卖。帕特小区的构造非常特别,都是双向道路且没有构成环——你可以简单地认为小区的路构成了一棵树,根结点是外卖站,树上的结点就是要送餐的地址。每到中午12点,帕特小区就进入了点餐高峰。一开始,只有一两个地方点外卖,龙......
  • 米尔FPGA核心板上市!国产紫光同创Logos-2核心板
    随着嵌入式的快速发展,在工控、通信、5G通信领域,FPGA以其超灵活的可编程能力,被越来越多的工程师选择。近日,米尔电子发布2款FPGA的核心板和开发板,型号分别为:基于紫光同创Logos-2系列PG2L100H的MYC-J2L100H核心板及开发板、基于XilinxArtix-7系列的MYC-J7A100T核心板及开发板。 ......
  • 高压线防外破智能警示球,“放松”不了一点
    “施工时要注意保持安全距离,不要触碰到邻近高压线路,也不要挖到地下电缆以及杆塔拉线”这是新乡供电公司组织开展冬季电力设施“防外破”安全隐患排查行动,对该市电力线路下正在施工的工程项目进行全面监督和检查,保障迎峰度冬期间电网安全运行。同样在夏季,施工现场也正在活跃当中......