Ingress详细介绍

概括Ingress的概念,如何安装Ingress以及Ingress的入门使用
1  Ingress概念
通俗来讲,ingress和之前提到的ServiceDeployment,也是一个k8s的资源类型,ingress用于实现用域名的方式访问k8s内部应用。
IngressKubernetes集群中的服务提供了入口,可以提供负载均衡、SSL终止和基于名称的虚拟主机,在生产环境中常用的IngressTreafikNginxHAProxyIstio等。
基本概念
Kubernetesv 1.1版中添加的Ingress用于从集群外部到集群内部ServiceHTTPHTTPS路由,流量从InternetIngress再到Services最后到Pod上,通常情况下,Ingress部署在所有的Node节点上。
Ingress可以配置提供服务外部访问的URL、负载均衡、终止SSL,并提供基于域名的虚拟主机。但Ingress不会暴露任意端口或协议。
2  Ingress安装
首先安装helm管理工具:https://helm.sh/docs/intro/install/
Helm下载地址
Helm安装
[root@master01 ~]# tar xf helm-v3.4.1-linux-amd64.tar.gz
[root@master01 ~]# mv linux-amd64/helm /usr/local/bin/helm
查看helm的版本
[root@master01 ~]# helm version
LPZBvXt262e232f042366.png
1. 添加ingresshelm仓库
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
查看repo
SkfwA74862e232f53c1bc.png
查看ingress-nginx的版本
[root@master01 ~]# helm search repo ingress-nginx
YZqW2Fo362e232f99a6e0.png
1. 下载ingresshelm包至本地
helm pull ingress-nginx/ingress-nginx
2. 更改对应的配置
[root@master01 ~]# mkdir temp
[root@master01 ~]# mv ingress-nginx-3.13.0.tgz temp/
[root@master01 ~]# cd temp/
[root@master01 temp]# tar xf ingress-nginx-3.13.0.tgz
[root@master01 temp]# cd ingress-nginx
[root@master01 ingress-nginx]# ls
CHANGELOG.md  Chart.yaml  ci  OWNERS  README.md  templates  values.yaml
[root@master01 ingress-nginx]#vim values.yaml
3. 需要修改的位置
a) ControlleradmissionWebhook的镜像地址,需要将公网镜像同步至公司内网镜像仓库
b) hostNetwork设置为true
c) dnsPolicy设置为 ClusterFirstWithHostNet
d) NodeSelector添加ingress: "true"部署至指定节点
e) 类型更改为kind: DaemonSet
         修改内容如下
6     repository: quay.io/kubernetes-ingress-controller/nginx-ingress-controller
      tag: "0.32.0"
        38   dnsPolicy: ClusterFirstWithHostNet
47   hostNetwork: true
133   kind: DaemonSet
231   nodeSelector:
232     kubernetes.io/os: linux
233     ingress: "true"
380     type: ClusterIP
471         repository: registry.cn-beijing.aliyuncs.com/dotbalo/kube-webhook-    certgen
4. 部署ingress
给需要部署ingress的节点上打标签
kubectl label node master02 ingress=true
kubectl create ns ingress-nginx
helm install ingress-nginx -n ingress-nginx .
查看pod
zb5HBFuv62e233000122e.png
一.1  Ingress入门使用
在创建ingress之前,确保之前创建的service可以使用
BYIBpxVF62e2330468374.png
创建一个ingress
# cat ingress.yaml
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  annotations:    #此处不是注释,是告诉ingress如何配置nginx配置文件
    kubernetes.io/ingress.class: "nginx"
  name: example
spec:
  rules: # 一个Ingress可以配置多个rules
  - host: foo.bar.com # 域名配置,不写默认匹配*, *.bar.com
    http:
      paths: # 相当于nginxlocation配合,同一个host可以配置多个path / /abc
      - backend:
          serviceName: nginx-svc
          servicePort: 80
        path: /
[root@master01 ~]# kubectl create -f ingress.yaml
ingress.networking.k8s.io/example created
fq68FnCU62e2330a300b4.png
给域名foo.bar.com添加hosts文件
192.168.100.203  foo.bar.com     #必须是ingress所在节点
查看ingressnginx的配置文件
RnKzmqJ862e233b14c8df.png
o1SKBgXf62e23312a46f7.png
/etc/nginx $ grep "foo.bar.com" nginx.conf -A 40    #查看这一行的后40
m69okSkO62e233540b957.png
创建一个多域名ingress
cat ingress-mulDomain.yaml
apiVersion: networking.k8s.io/v1beta1 # networking.k8s.io/v1 / extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: "nginx"
  name: example
spec:
  rules: # 一个Ingress可以配置多个rules
  - host: foo.bar.com # 域名配置,可以不写,匹配*, *.bar.com
    http:
      paths: # 相当于nginxlocation配合,同一个host可以配置多个path / /abc
      - backend:
          serviceName: nginx-svc
          servicePort: 80
        path: /
  - host: foo2.bar.com # 域名配置,可以不写,匹配*, *.bar.com
    http:
      paths: # 相当于nginxlocation配合,同一个host可以配置多个path / /abc
      - backend:
          serviceName: nginx-svc-external
          servicePort: 80
        path: /
整体访问流程图如下:
bIFOtDVu62e23359a02ed.png
B5DFJ7Qt62e2335dcf531.jpg
z

0 条评论

请先 登录 后评论
乐维君
乐维君

397 篇文章

作家榜 »

  1. 乐维君 397 文章
  2. YOHOHO 14 文章
  3. 机灵小和尚 13 文章
  4. 我是一只小菜鸡 12 文章
  5. 细雨闲花 11 文章
  6. 。。。 9 文章
  7. 御前侍卫张五哥 9 文章
  8. 小黄人 8 文章