zoukankan      html  css  js  c++  java
  • 18--k8s之Nginx ingress

    一、介绍

    ingress为kubernetes集群中的服务提供了入口,可以提供负载均衡,ssl终止和基于名称的虚拟主机,在生产环境中常用的Ingress有treafik、Nginx、HAProxy、Istio等。在kubernetesv 1.1 版中添加的 Ingress 用于从集群外部到集群内部 Service 的 HTTP 和 HTTPS 路由,流量从 Internet 到 Ingress 再到 Services 最后到 Pod 上,通常情况下,Ingress 部署在所有的 Node 节点上。Ingress 可以配置提供服务外部访问的 URL、负载均衡、终止 SSL,并提供基于域名的虚拟主机。但 Ingress 不会暴露任意端口或协议。

    二、安装nginx ingress

    # 下载
    wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.41.2/deploy/static/provider/baremetal/deploy.yaml
    
    # 修改自己的镜像
        spec:
          dnsPolicy: ClusterFirst
          containers:
            - name: controller
              image: registry.cn-shanghai.aliyuncs.com/baim0os/ingress-nginx:v0.44.0
              imagePullPolicy: IfNotPresent
              lifecycle:
                preStop
        或者
    修改镜像
    [root@k8s-m-01 ~]# sed -i 's#k8s.gcr.io/ingress-nginx/controller:v0.48.1@sha256:e9fb216ace49dfa4a5983b183067e97496e7a8b307d2093f4278cd550c303899#registry.cn-hangzhou.aliyuncs.com/k8sos/ingress-controller:v0.48.1#g' deploy.yaml
        
    # 安装
    kubectl apply -f deploy.yaml
    
    # 检查是否安装成功
    kubectl get pods -n ingress-nginx
    
    

    三、http部署

    1.编写一个service准备实验

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: discuz
    spec:
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
            - name: nginx
              image: nginx
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: discuz
    spec:
      selector:
        app: nginx
      ports:
        - port: 80
          targetPort: 80
          protocol: TCP
          nodePort: 30080
      type: NodePort
    
    

    2.编写http的ingress

    kind: Ingress
    apiVersion: networking.k8s.io/v1
    metadata:
      name: discuz
    spec:
      rules:
        - host: "www.discuz.com" # 要绑定的域名
          http:
            paths:
              - path: / # 请求的路径
                pathType: Prefix #自由匹配
                # pathType: Exact # 精确匹配
                backend:
                  service:
                    name: discuz # 必须和service的名字一致才可以绑定
                    port:
                      number: 80  # 服务的端口号
    
    

    3.部署

    [root@m01 k8s]# kubectl apply -f nginx.yaml 
    deployment.apps/discuz created
    service/discuz created
    ingress.networking.k8s.io/discuz created
    [root@m01 k8s]# kubectl get svc -n ingress-nginx 
    NAME                                 TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                      AGE
    ingress-nginx-controller             NodePort    10.99.211.135   <none>        80:30685/TCP,443:30542/TCP   3d
    ingress-nginx-controller-admission   ClusterIP   10.99.2.179     <none>        443/TCP                      3d
    # 配置本地的hosts去进行访问
    www.discuz.com:30685
    
    

    img

    四、https部署

    # 生成证书
    [root@m01 k8s]# openssl genrsa -out tls.key 2048
    [root@m01 k8s]# openssl req -new -x509 -key tls.key -out tls.crt -subj /C=CN/ST=ShangHai/L=ShangHai/O=Ingress/CN=www.test.com
    
    # 查看
    [root@m01 k8s]# ll
    -rw-r--r-- 1 root root 1289 Aug 12 22:46 tls.crt
    -rw-r--r-- 1 root root 1679 Aug 12 22:46 tls.key
    
    
    # 绑定证书
    kubectl -n [名称空间] create secret tls [secretname] --cert=[证书.crt] --key=[证书.key]
    
    kubectl -n default create secret tls ingress-tls --cert=tls.crt --key=tls.key
    
    
    kind: Ingress
    apiVersion: networking.k8s.io/v1
    metadata:
      name: discuz
    spec:
      tls:
        - secretName: ingress-tls # 创建的加密的证书名
      rules:
        - host: "www.discuz.com" # 要绑定的域名
          http:
            paths:
              - path: / # 请求的路径
                pathType: Prefix #自由匹配
                # pathType: Exact # 精确匹配
                backend:
                  service:
                    name: discuz # 必须和service的名字一致才可以绑定
                    port:
                      number: 80  # 服务的端口号
    
    
    # 部署
    kubectl apply -f
    
    # 配置hosts访问
    www.discuz.com:30542
    
    

    img

    五、常用配置

    通过annotations来添加各种的功能

    1、生成密码文件
    [root@kubernetes-master-01 ingress]# yum install httpd-tools -y
    [root@kubernetes-master-01 ingress]# htpasswd -c auth baim0
    
    创建secret,把密码文件放置于集群中
    [root@kubernetes-master-01 ingress]# kubectl create secret generic basic-auth --from-file=auth 
    
    编写注解,使用auth功能
          annotations:
            nginx.ingress.kubernetes.io/auth-type: basic # 类型
            nginx.ingress.kubernetes.io/auth-secret: basic-auth # secret
            nginx.ingress.kubernetes.io/auth-realm: "在线发牌!" # 提示信息
            
    2、限制并发数
    nginx.ingress.kubernetes.io/limit-connections: 1
    
    3、每秒从给定 IP 接受的请求数
    nginx.ingress.kubernetes.io/limit-rps: 1
    
    4、每分钟从给定 IP 接受的请求数
    nginx.ingress.kubernetes.io/limit-rpm: 1
    
    5、初始千字节数
    nginx.ingress.kubernetes.io/limit-rate-after: 1
    
    6、白名单
    nginx.ingress.kubernetes.io/whitelist-source-range: 192.168.13.59
    
    

    详细请查询

    https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/annotations/

  • 相关阅读:
    centos7.9安装mysql,远程无法连接的问题
    netcore 自定义脚手架
    mongodb查询出某个字段最大值
    解决Docker容器内不能使用vim命令的问题
    git 撤销修改和版本回退
    【转】一文读懂PCA算法的数学原理
    【转】Maximal Information Coefficient (MIC)最大互信息系数详解与实现
    【转】带约束的多目标优化进化算法综述
    论文快报-2021-10-Multi-task optimization and evolutionary multitasking
    【Vegas原创】SQL Server数据库备份、差异备份、日志备份脚本
  • 原文地址:https://www.cnblogs.com/caodan01/p/15142709.html
Copyright © 2011-2022 走看看