kubernetes————Ingress对象

一,Ingress的意义

  • k8s中的一个抽象资源,给管理员提供一个暴露应用的入口定义方法
  • 给公网用户提供一个访问的统一入口(80/443),特别是针对service nodeport
  • 基于service提供服务,是一种集群中全局的负载均衡器,给集群内提供访问统一入口 可以根据域名、URL转发给不同的Service

二,Ingress Controller

根据Ingress生成具体的路由规则,对Pod提供负载均衡器
测试时,ingress-controller副本数为1时,域名解析必须绑定在pod所在的宿主机上

三,Ingress两种方式

3.1,Service NodePort访问Ingress Controller ( 默认方式)

    user ->公网负载均衡器(80)->  service nodeport(80:32287/TCP,443:31474/TCP)- >iptables/ipvs  - >  Ingress controller pod(nginx,基于域名分流)-> 节点上的pod

3.2,hostNetwork访问Ingress Controller

每一个node节点只能跑一个pod(80端口不能冲突)

 user通过80端口访问 ->公网负载均衡器(80)->  宿主机80端口(Ingress Controller中的nginx) -> Ingress Controller pod (nginx,基于域名分流)  -> 节点上的pod

默认为service模式,修改方式:
修改ingress-controller.xx.yaml

spec:
    dnsPolicy: ClusterFirst
    hostNetwork: True  #添加此项

四,Ingress基于域名暴露服务

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: web    #创建的ingress名称
spec:
  ingressClassName: "nginx"
  rules:
  - host: web1.ale.com    #绑定的域名
    http:
      paths:
      - path: /    #默认转变路径,网站根目录
        pathType: Prefix
        backend:
          service:
            name: web #绑定的service
            port: 
              number: 80

五,Ingress基于URL路由多个服务

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: web2
spec:
  ingressClassName: "nginx"
  rules:
  - host: web2.ale.com
    http:
      paths:
      - path: /foo    #访问时加的url
        pathType: Prefix
        backend:
          service:
            name: web    #访问转发的service名称
            port: 
              number: 80
      - path: /bar    #访问时加的url
        pathType: Prefix
        backend:
          service:
            name: web2  #访问转发的service名称
            port:
              number: 80

hostNetwork http访问:http://web2.ale.com/bar/ http://web2.ale.com/foo/
hostNetwork https访问:https://web2.ale.com/bar/ https://web2.ale.com/foo/

六,Ingress基于名称虚拟主机

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: web3
spec:
  ingressClassName: "nginx"
  rules:
  - host: web3-1.ale.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: web
            port: 
              number: 80
  - host: web3-2.ale.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: web2
            port: 
              number: 80

七,Ingress Https

7.1,将ssl证书保存到k8s中

kubectl create secret tls ale-cn --cert=www.ale.cn.pem --key=www.ale.cn-key.pem

7.2,创建ingress

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ale
spec:
  tls:
  - hosts:
      - www.ale.cn
    secretName: ale-cn  #保存在k8s中的证书名称
  ingressClassName: "nginx" 
  rules:
  - host: www.ale.cn
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: web
            port: 
              number: 80

nodeport访问时加的是ingress svc暴露的nodeport端口
http访问:http://www.ale.cn:30375/
https访问:https://www.ale.cn:32376/

八,对单个ingress的nginx server模块配置参数

metadate:
  annotations:
    nginx.ingress.kubernetes.io/ssl-redirect: 'false' #默认http会自动转https,false关闭
    nginx.ingress.kubernetes.io/rewrite-target: /foo/index.html #访问/path路径的时候,重定向到此处路径,可以写其他站点/域名
    nginx.ingress.kubernetes.io/proxy-body-size: "10m" #设置客户端上传文件大小10M
    nginx.ingress.kubernetes.io/proxy-connect-timeout: "600"
    nginx.ingress.kubernetes.io/proxy-send-timeout: "600"
    nginx.ingress.kubernetes.io/proxy-read-timeout: "600"
    nginx.ingress.kubernetes.io/server-snippet: |
        if ($http_user_agent ~* '(Android|iPhone)') {
        rewrite ^/(.*) http://m.baidu.com break;
        }  #自定义规则格式

spec:
  ingressClassName: "nginx" 
  tls:
  - hosts:
      - www.ale.cn
    secretName: ale-cn
  rules:
  - host: www.ale.cn
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: web
            port: 
              number: 80

九,ingress多节点高可用

apiVersion: apps/v1
kind: DaemonSet
metadata:
  labels:
    helm.sh/chart: ingress-nginx-4.0.10
     spec:
      dnsPolicy: ClusterFirst
      nodeSelector:
        ingress: true

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

背锅攻城师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值