zoukankan      html  css  js  c++  java
  • k8s的ingress资源简述

    ingress controller是独立与controller-manager的
    Ingress的主要作用是可以利用nginx,haproxy,envoy,traefik等负载均衡器来暴露集群内部服务。
    利用Ingress可以解决内部资源访问外部资源的方式,和四层调度替换为七层调度的问题。
    解决因为四层iptables/ipvs规则实现调度或加密tsl的方式过于复杂且效率低下的问题,因为四层调度的iptables/ipvs模块无法卸载,所以使用七层负载均衡来替代。

    用户访问过程:
    用户访问->nodeIP:Nodeport->podIP:containerPort

    ingress原理:
    用户访问-->LB-->ingress-nginx-service-->ingressController-ingress-nginx-pod-->ingress字段中调用的后端pod
    后端pod的service只提供pod归类,归类后ingress会将此service中的后端pod信息提取出来,然后动态注入到ingress-nginx-pod中的ingress字段中
    随后,后端pod就被调用到了

    例:myapp
    1.下载资源。github上搜索ingress-nginx,找到deploy项目,下载里面的mandatory.yaml,或在https://kubernetes.github.io/ingress-nginx/deploy/查看教程下载mandatory.yaml和service-nodeport.yaml
    下载yaml后,kubectl apply -f mandatory.yaml。会创建1个pod:nginx-ingress-controller,1个svc:ingress-nginx,1个namespace
                kubectl apply -f service-nodeport.yaml会创建一个service
                这两条命令创建出ingress框架:ns/svc/deploy/ingress/,以后创建后端和后端匹配的ingress资源就可以使用生成的svc来访问了
    2.创建myapp后端资源:

     1 apiVersion: v1
     2 kind: Service
     3 metadata:
     4   name: myapp
     5   namespace: default
     6 spec:
     7   selector:
     8     app: myapp
     9     release: canary
    10   ports:
    11   - name: http
    12     targetPort: 80
    13     port: 80
    14 ---
    15 apiVersion: apps/v1
    16 kind: Deployment
    17 metadata:
    18   name: myapp-deploy
    19   namespace: default
    20 spec:
    21   replicas: 3
    22   selector:
    23     matchLabels:
    24       app: myapp
    25       release: canary
    26   template:
    27     metadata:
    28       labels:
    29         app: myapp
    30         release: canary
    31     spec:
    32       containers:
    33       - name: myapp
    34         image: ikubernetes/myapp:v2
    35         ports:
    36         - name: http
    37           containerPort: 80

     3.创建ingress

     1 apiVersion: extensions/v1beta1
     2 kind: Ingress
     3 metadata:
     4   name: ingress-myapp
     5   namespace: default
     6   annotations:
     7     kubernetes.io/ingess.class: "nginx"
     8 spec:
     9   rules:
    10   - host: smbands.com
    11     http:
    12        paths:
    13        - path:
    14          backend:
    15            serviceName: myapp  ##注此处必须要和后端pod的service的名称一致,否则会报503错误
    16            servicePort: 80     ##注此处必须要和后端pod的service的端口一致,否则会报503错误

    #然后kubectl apply -f myapp-demo.yaml、kubectl apply -f ingress-demo.yaml。

    4.访问。

    确保hosts文件可以正确解析即可访问,使用域名+ingress-nginx的service暴露的端口


    自签证书https  tls
    例:
    1.生成所需文件

    生成私钥文件:openssl genrsa -out tls.key 2048
      生成证书文件:openssl req -new -x509 -key tls.key -out tls.crt -subj /C=CN/ST=Beijing/L=Beijing/O=DepOps/CN=tomcat.smbands.com
    会有tls.crt  tls.key两个文件

    2.创建后端pod资源

     1 apiVersion: v1
     2 kind: Service
     3 metadata:
     4   name: tomcat  ##下面的Ingess的资源清单里面的serviceName必须与此名称一致,否则报503错误。
     5   namespace: default
     6 spec:
     7   selector:
     8     app: tomcat
     9     release: canary
    10   ports:
    11   - name: http
    12     targetPort: 8080
    13     port: 8080
    14   - name: ajp
    15     targetPort: 8009
    16     port: 8009
    17 ---
    18 apiVersion: apps/v1
    19 kind: Deployment
    20 metadata:
    21   name: tomcat-deploy
    22   namespace: default
    23 spec:
    24   replicas: 3
    25   selector:
    26     matchLabels:
    27       app: tomcat
    28       release: canary
    29   template:
    30     metadata:
    31       labels:
    32         app: tomcat
    33         release: canary
    34     spec:
    35       containers:
    36       - name: tomcat
    37         image: tomcat
    38         ports:
    39         - name: http
    40           containerPort: 8080
    41         - name: ajp
    42           containerPort: 8009

    3.创建secert资源,使其将证书密钥注入到tomcat配置文件中:

    1 kubectl create secret tls tomcat-ingress-secret --cert=tls.crt --key=tls.key

    4.创建ingress资源:

     1 apiVersion: extensions/v1beta1
     2 kind: Ingress
     3 metadata:
     4   name: ingress-tomcat-tls
     5   namespace: default
     6   annotations:
     7     kubernetes.io/ingess.class: "nginx"
     8 spec:
     9   tls:
    10   - hosts:
    11     - tomcat-smbands.com
    12     secretName: tomcat-ingress-secret
    13   rules:
    14   - host: tomcat.smbands.com
    15     http:
    16        paths:
    17        - path:
    18          backend:
    19            serviceName: tomcat  ##注:这里的serviceName必须与pod的service名称一致,否则会报503错误。
    20            servicePort: 8080    ##注此处必须要和后端pod的service的端口一致,否则会报503错误

    5.应用

    kubectl apply -f tomcat-ingress-tls.yaml
    6.访问。

    确保hosts文件可以正确解析即可访问,使用域名https://tomcat.smbands.com:ingress的service向外暴露的端口。


  • 相关阅读:
    Trying to reload asset from disk that is not stored on disk
    学习,再学习!
    关于webQQ3.0
    java 之 枚举
    部队的日子
    大兵
    关于webQQ3
    Ubuntu下gedit的java编译设置
    晒晒
    chrome中行网银插件(Linux下可用,可以淘宝支付宝)
  • 原文地址:https://www.cnblogs.com/Smbands/p/10841700.html
Copyright © 2011-2022 走看看