• K8S 控制器 service ingress


    控制器

    Pod 的分类

    自主式 Pod:Pod 退出后不会被创建

    控制器管理的 Pod:在控制器的生命周期里,始终要维持 Pod 的副本数目

    控制器类型

    Replication Controller和ReplicaSet 、Deployment 、DaemonSet 、StatefulSet、Job、CronJob HPA全称Horizontal Pod Autoscaler

           ReplicaSet 是下一代的 Replication Controller,官方推荐使用ReplicaSet。 ReplicaSet 和 Replication Controller 的唯一区别是选择器的支持,ReplicaSet 支持新的基于集合的选择器需求。 ReplicaSet 确保任何时间都有指定数量的 Pod 副本在运行。 虽然 ReplicaSets 可以独立使用,但今天它主要被Deployments 用作协调 Pod 创建、删除和更新的机制。

           StatefulSet是用来管理有状态应用的工作负载 API 对象。实例之间有不对等关系,以及实例对外部数据有依赖关系的应用,称为“有状态应用”  StatefulSet 用来管理 Deployment 和扩展一组 Pod,并且能为这些 Pod 提供*序号和唯一性保证*。  StatefulSets 对于需要满足以下一个或多个需求的应用程序很有价值: 稳定的、唯一的网络标识符。 稳定的、持久的存储。 有序的、优雅的部署和缩放。 有序的、自动的滚动更新。

           Deployment 为 Pod 和 ReplicaSet 提供了一个申明式的定义方法。 典型的应用场景: 用来创建Pod和ReplicaSet 滚动更新和回滚 扩容和缩容 暂停与恢复。

    Job控制器

    执行批处理任务,仅执行一次任务,保证任务的一个或多个Pod成功结束。

     给三台机器下载per1

     复制文件并编辑

     

     

    CronJob控制器

    CronJob HPA全称Horizontal Pod Autoscaler,根据资源利用率自动调整service中Pod数量,实现Pod水平自动缩放。

     

     

     

     

     

    service

    • Service可以看作是一组提供相同服务的Pod对外的访问接口。借助Service,应 用可以方便地实现服务发现和负载均衡。

    • service默认只支持4层负载均衡能力,没有7层功能。(可以通过Ingress实现)

    • service的类型:

    • ClusterIP:默认值,k8s系统给service自动分配的虚拟IP,只能在集群内部访问。

    • NodePort:将Service通过指定的Node上的端口暴露给外部,访问任意一个 NodeIP:nodePort都将路由到ClusterIP。

    • LoadBalancer:在 NodePort 的基础上,借助 cloud provider 创建一个外部的负载均 衡器,并将请求转发到 :NodePort,此模式只能在云服务器上使用。

    • ExternalName:将服务通过 DNS CNAME 记录方式转发到指定的域名(通过 spec.externlName 设定)。

    • Service 是由 kube-proxy 组件,加上 iptables 来共同实现的.

    • kube-proxy 通过 iptables 处理 Service 的过程,需要在宿主机上设置相当多的 iptables 规则,如果宿主机有大量的Pod,不断刷新iptables规则,会消耗大量的CPU 资源。

    • IPVS模式的service,可以使K8s集群支持更多量级的Pod。

    从外部访问 Service ,适用于公有云上的 Kubernetes 服务。这时 候,你可以指定一个 LoadBalancer 类型的 Service。

    apiVersion: v1
    kind: Service
    metadata:
      name: my-service
    spec:
      ports:
        - name: http
          port: 80
          targetPort: 80

     

     

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: myapp-deployment
      labels:
        app: myapp
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: myapp
      template:
        metadata:
          labels:
            app: myapp
        spec:
          containers:
          - name: myapp
            image: myapp:v1

     

     

     

    ExternalName

     从外部访问的第三种形式ExtenalName,通过给定域名访问解析

    拉起容器后查看服务信息,可以看到externalname额外的域名  

     

    apiVersion: v1

    kind: Service

    metadata:

    name: my-service

    spec:

    type: ExternalName

    externalName: test.baidu.com

     

    更改为百度

     查询svc发现更改

    下载网站内容

     

     查看镜像名称

     搜索镜像

     

     

     

     

     

     

     

     更改镜像名称后

     开启服务查看结果

     

     

     

     

     ingress服务

    一种全局的、为了代理不同后端 Service 而设置的负载均衡服务,就是 Kubernetes 里的Ingress 服务。Ingress Controller 会根据你定义的 Ingress 对象,提供对应的代理能力。业界常用的各种反向代理项目,比如 Nginx、HAProxy、Envoy、Traefik 等,都已经为Kubernetes 专门维护了对应的 Ingress Controller。  

    详情登录官网查看:https://kubernetes.github.io/ingress-nginx/ 

     

     复制官方文档 内容

     

     apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: ingress-myservicea
    spec:
      rules:
      - host: www1.westos.org
        http:
          paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: web1
                port:
                  number: 80
      ingressClassName: nginx

     

     

    kubectl describe ingress ingress-myservice

     

    Ingress TLS 配置 

     

     

     

     

     

     

     

    openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/CN=nginxsvc/O=nginxsvc"

     

     

     

    vim ingress.yaml

    进入set paste模式编辑 不会出缩进问题

     访问http://www1.westos.org/

     

     

     添加认证

     

     


    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: ingress-myservicea
      annotations:
        nginx.ingress.kubernetes.io/app-root: /hostname.html  
        nginx.ingress.kubernetes.io/auth-type: basic
        nginx.ingress.kubernetes.io/auth-secret: basic-auth
        nginx.ingress.kubernetes.io/auth-realm: 'Authentication Required - qaq'
    spec:
      tls:
        - hosts:
          - www1.westos.org
          secretName: tls-secret
      rules:
      - host: www1.westos.org
        http:
          paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: web1
                port:
                  number: 80
      - host: www2.westos.org
        http:
          paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: web2
                port:
                  number: 80

     

     

     

     

     

     

     

  • 相关阅读:
    SpringBoot:自定义注解
    12、JAVA入门——二维数组
    【Python抽奖系统】好消息:史上最强商场抽奖活动来啦,超优惠,攻略快拿好啦~(超牛)
    Solidity 小白教程:5. 变量数据存储和作用域 storage_memory_calldata
    Oracle 迁移至Mysql
    FPGA刷题——存储器(RAM和FIFO的Verilog实现)
    BC范式分解问题,有没有会的朋友
    leetcode 118. 杨辉三角-java实现
    《评标专家和评标专家库管理暂行办法》(发改委第29号 )
    java每日一练(2)
  • 原文地址:https://blog.csdn.net/S1301489229/article/details/125417034