什么是Ingress

1、Ingress概念

  • 通俗来讲,ingress和之前提到的Service、Deployment,也是一个k8s的资源类型,Ingress用于实现用域名的方式访问k8s内部应用。
  • Ingress为Kubernetes集群中的服务提供了入口,可以提供负载均衡、SSL终止和基于名称的虚拟主机,在生产环境中常用的Ingress有Treafik、Nginx、HAProxy、Istio等。
  1. 基本概念
  • 在Kubernetesv 1.1版中添加的Ingress用于从集群外部到集群内部Service的HTTP和HTTPS路由,流量从Internet到Ingress再到Services最后到Pod上,通常情况下,Ingress部署在所有的Node节点上。
  • Ingress可以配置提供服务外部访问的URL、负载均衡、终止SSL,并提供基于域名的虚拟主机。但Ingress不会暴露任意端口或协议。

2、Ingress安装

  1. 首先安装helm管理工具:
  • Helm下载地址:https://get.helm.sh/helm-v3.8.2-linux-amd64.tar.gz
  • Helm安装
#解压缩
[root@k8s-master helm]# tar -zxvf helm-v3.8.2-linux-amd64.tar.gz 

[root@k8s-master helm]# mv linux-amd64/helm /usr/local/bin/helm

#查看版本
[root@k8s-master helm]# helm version
version.BuildInfo{Version:"v3.8.2", GitCommit:"6e3701edea09e5d55a8ca2aae03a68917630e91b", GitTreeState:"clean", GoVersion:"go1.17.5"}

  1. 添加ingress-nginx 仓库
[root@k8s-master helm]# helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
"ingress-nginx" has been added to your repositories
#查看
[root@k8s-master helm]# helm repo list
NAME            URL                                       
ingress-nginx   https://kubernetes.github.io/ingress-nginx

[root@k8s-master ~]# helm search repo ingress-nginx
NAME                            CHART VERSION   APP VERSION     DESCRIPTION                                       
ingress-nginx/ingress-nginx     4.1.1           1.2.0           Ingress controller for Kubernetes using NGINX a...

  1. 下载 ingress-nginx配置文件
[root@k8s-master ~]# cd /home/

[root@k8s-master home]# mkdir ingress-nginx

[root@k8s-master home]# cd ingress-nginx/

[root@k8s-master ingress-nginx]# helm pull ingress-nginx/ingress-nginx

[root@k8s-master ingress-nginx]# ls
ingress-nginx-4.1.1.tgz

#解压
[root@k8s-master ingress-nginx]# tar zxvf ingress-nginx-4.1.1.tgz 

[root@k8s-master ingress-nginx]# cd ingress-nginx
[root@k8s-master ingress-nginx]# ls
CHANGELOG.md  Chart.yaml  ci  OWNERS  README.md  README.md.gotmpl  templates  values.yaml

#修改配置文件
[root@k8s-master ingress-nginx]# vim values.yaml  

#修改镜像仓库
#1    
controller:
  name: controller
  image:
    ## Keep false as default for now!
    chroot: false
    registry: registry.cn-shanghai.aliyuncs.com
    image: wanfei/ingress-nginx-controller
    tag: "v1.1.2"
    #digest: sha256:d8196e3bc1e72547c5dec66d6556c0ff92a23f6d0919b206be170bc90d5f9185
    
#2    
    dnsPolicy: ClusterFirstWithHostNet
    hostNetwork: true

#3 
	kind: DaemonSet

#4
 terminationGracePeriodSeconds: 300

  # -- Node labels for controller pod assignment
  ## Ref: https://kubernetes.io/docs/user-guide/node-selection/
  ##
  nodeSelector:
    kubernetes.io/os: linux
    ingress: "true"

#5
  #type: LoadBalancer改为
   type: ClusterIP

#6
patch:
      enabled: true
      image:
        registry: registry.cn-shanghai.aliyuncs.com
        image: wanfei/kube-webhook-certgen
        tag: v1.1.1
        #digest: sha256:64d8c73dca984af206adf9d6d7e46aa550362b1d7a01f3a0a91b20cc67868660
        pullPolicy: IfNotPresent

  1. 安装
#创建namespace
[root@k8s-master ingress-nginx]# kubectl create ns ingress-nginx
namespace/ingress-nginx created

#给节点打标签
[root@k8s-master ingress-nginx]# kubectl label node k8s-master ingress=true
node/k8s-master labeled

[root@k8s-master ingress-nginx]# helm install ingress-nginx -n ingress-nginx .

#安装完毕
[root@k8s-master ingress-nginx]# kubectl get po -n ingress-nginx
NAME                             READY   STATUS    RESTARTS   AGE
ingress-nginx-controller-dxfbz   1/1     Running   0          2m56s

  1. 添加节点
[root@k8s-master ingress-nginx]# kubectl label node k8s-node01 ingress=true
node/k8s-node01 labeled

[root@k8s-master ingress-nginx]# kubectl get po -n ingress-nginx -owide
NAME                             READY   STATUS              RESTARTS   AGE   IP              NODE         NOMINATED NODE   READINESS GATES
ingress-nginx-controller-89pxh   0/1     ContainerCreating   0          50s   172.16.55.221   k8s-node01   <none>           <none>
ingress-nginx-controller-dxfbz   1/1     Running             0          78m   172.16.55.220   k8s-master   <none>           <none>
  1. 删除节点
[root@k8s-master ingress-nginx]# kubectl label node k8s-node01 ingress-
node/k8s-node01 labeled

[root@k8s-master ingress-nginx]# kubectl get po -n ingress-nginx -owide
NAME                             READY   STATUS    RESTARTS   AGE   IP              NODE         NOMINATED NODE   READINESS GATES
ingress-nginx-controller-dxfbz   1/1     Running   0          81m   172.16.55.220   k8s-master   <none>           <none>

3、Ingress简单使用

  1. 新建ingress.yaml
[root@k8s-master ~]# vim ingress.yaml
	  
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: "nginx"
  name: example 
spec:
  rules: #一个ingress 可以配置多个rules
  - host: foo.bar.com #域名配置 ,可以不写,匹配*,可以正则表达  *.bar.com
    http:
      paths: #相当于nginx的location配置,同个host可以配置多个path/ /abc
      - path: / 
        pathType: Prefix
        backend:
          service:
            name: nginx-test-svc  #表示代理到哪个service
            port: 
              number: 80 #表示代理到哪个service 端口号

  1. 创建 ingress
[root@k8s-master ~]# kubectl create -f ingress.yaml 

[root@k8s-master ~]# kubectl get ing
NAME      CLASS    HOSTS         ADDRESS          PORTS   AGE
example   <none>   foo.bar.com   10.102.228.152   80      6m24s


#设置 host  ingress安装的服务器IP foo.bar.com
#通过浏览器 访问 foo.bar.com

4、多域名使用

  1. 修改yaml
[root@k8s-master ~]# cp ingress.yaml ingress-dulDomain.yaml

#查看可以绑定的svc
[root@k8s-master ~]# kubectl get svc
NAME                 TYPE           CLUSTER-IP      EXTERNAL-IP     PORT(S)        AGE
kubernetes           ClusterIP      10.96.0.1       <none>          443/TCP        13d
nginx-externalname   ExternalName   <none>          www.baidu.com   <none>         23h
nginx-svc-external   ClusterIP      10.96.196.165   <none>          80/TCP         24h
nginx-test-svc       NodePort       10.99.39.37     <none>          80:31000/TCP   27h


#修改yaml
[root@k8s-master ~]# vim ingress-dulDomain.yaml 

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: "nginx"
  name: example 
spec:
  rules:
  - host: foo.bar.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: nginx-test-svc
            port: 
              number: 80
  - host: foo2.bar.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: nginx-test-svc
            port: 
              number: 80


#重新发布
[root@k8s-master ~]# kubectl replace -f ingress-dulDomain.yaml
ingress.networking.k8s.io/example replaced

[root@k8s-master ~]# kubectl get ing
NAME      CLASS    HOSTS                      ADDRESS          PORTS   AGE
example   <none>   foo.bar.com,foo3.bar.com   10.102.228.152   80      48m
  • 不同域名对应不同的service,访问不同的应用
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值