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后端资源:
apiVersion: v1
kind: Service
metadata:
  name: myapp
  namespace: default
spec:
  selector:
    app: myapp
    release: canary
  ports:
  - name: http
    targetPort: 80
    port: 80
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp-deploy
  namespace: default
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
      release: canary
  template:
    metadata:
      labels:
        app: myapp
        release: canary
    spec:
      containers:
      - name: myapp
        image: ikubernetes/myapp:v2
        ports:
        - name: http
          containerPort: 80
#然后kubectl apply -f myapp-demo.yaml。
3.确保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资源

3.创建secert资源,使其将证书密钥注入到tomcat配置文件中:
kubectl create secret tls tomcat-ingress-secret --cert=tls.crt --key=tls.key


4.创建ingress资源:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-tomcat-tls
  namespace: default
  annotations:
    kubernetes.io/ingess.class: "nginx"
spec:
  tls:
  - hosts:
    - tomcat-smbands.com
    secretName: tomcat-ingress-secret
  rules:
  - host: tomcat.smbands.com
    http:
       paths:
       - path:
         backend:
           serviceName: tomcat
           servicePort: 8080
4.应用kubectl apply -f tomcat-ingress-tls.yaml
5.确保hosts文件可以正确解析即可访问,使用域名https://tomcat.smbands.com:ingress的service向外暴露的端口。


猜你喜欢

转载自www.cnblogs.com/Smbands/p/10841700.html