Ingress-nginx简介

Pod的IP以及service IP只能在集群内访问,如果想在集群外访问kubernetes提供的服务,可以使用nodeport、proxy、loadbalacer以及ingress等方式,由于service的IP集群外不能访问,可以使用ingress方式再代理一次,即ingress代理service,service代理pod。

Ingress基本原理图如下:

官网:https://kubernetes.github.io/ingress-nginx/
源码:https://github.com/kubernetes/ingress-nginx

下面以在阿里云自建kubernetes集群为例,使用SLB做四层代理,转发到ingress-controller节点,基本原理图如下:

备注:在私有云环境可以使用nginx四层代理配合keepalived替换上图LB。

helm部署ingress-nginx

官方参考:

https://kubernetes.github.io/ingress-nginx/deploy/#using-helm

https://github.com/kubernetes/ingress-nginx/blob/master/charts/ingress-nginx/values.yaml

集群节点:

主机名 IP地址 描述
cn-shenzhen.192.168.0.48 192.168.0.48 master节点
cn-shenzhen.192.168.0.49 192.168.0.49 ingress节点
cn-shenzhen.192.168.0.50 192.168.0.50 ingress节点
cn-shenzhen.192.168.0.51 192.168.0.51 node节点

部署方式:

  • DaemonSet + nodeSeletor
  • deployment设置replicas数量 + nodeSeletor + pod互斥

这里选择第一种方式,选择2个worker节点打标签,以daemonset+hostNetwork方式部署高可用ingress-nginx-controller。

添加helm chat

helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo updatehelm search repo -l ingress-nginx

选择两个worker节点打标签

kubectl label nodes cn-shenzhen.192.168.0.49 node=ingress
kubectl label nodes cn-shenzhen.192.168.0.50 node=ingress

部署ingress-nginx,默认镜像位于国外,需自行想办法保存到可以访问的镜像仓库,这里使用dockerhub上搜索到的镜像:

helm install nginx-ingress ingress-nginx/ingress-nginx \--namespace ingress-nginx \--create-namespace \--set controller.image.registry=willdockerhub \--set controller.image.image=ingress-nginx-controller \--set controller.image.tag=v0.48.1 \--set controller.image.digest="" \--set controller.hostNetwork=true \--set controller.kind=DaemonSet \--set controller.service.type=ClusterIP \--set controller.hostPort.enable=true \--set controller.hostPort.http=80 \--set controller.hostPort.https=443 \--set controller.nodeSelector.node=ingress

查看创建的pods,被部署在标签为node=ingress的两个节点上:

[root@master ~]# kubectl -n ingress-nginx get pods -o wide
NAME                                           READY   STATUS    RESTARTS   AGE     IP             NODE                       NOMINATED NODE   READINESS GATES
nginx-ingress-ingress-nginx-controller-5wbfv   1/1     Running   0          4m11s   192.168.0.50   cn-shenzhen.192.168.0.50   <none>           <none>
nginx-ingress-ingress-nginx-controller-q9st2   1/1     Running   0          4m11s   192.168.0.49   cn-shenzhen.192.168.0.49   <none>           <none>

查看创建的service

[root@master ~]# kubectl -n ingress-nginx get svc
NAME                                               TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
nginx-ingress-ingress-nginx-controller             ClusterIP   172.16.94.159   <none>        80/TCP,443/TCP   4m14s
nginx-ingress-ingress-nginx-controller-admission   ClusterIP   172.16.118.78   <none>        443/TCP          4m14s

配置负载均衡

创建带有公网IP的负载均衡实例,监听四层80和443端口,转发到后端两个ingress节点hostNetwork 80和443端口:

配置域名解析,指向SLB公网IP地址:

*apps.cloudcele.com ---> 120.24.77.158

以阿里云域名为例

创建示例应用

创建两副本nginx应用、ClusterIP类型service及ingress规则:

helm repo add bitnami https://charts.bitnami.com/bitnamihelm install nginx-app bitnami/nginx \--namespace=apps \--create-namespace \--set replicaCount=2 \--set containerPorts.http=8080 \--set service.type=ClusterIP \--set service.port=80 \--set service.targetPortt=8080 \--set ingress.enabled=true \--set ingress.pathType=Prefix \--set ingress.hostname=demo.apps.cloudcele.com \--set ingress.path=/

查看创建的pods

[root@master ~]# kubectl -n apps get pods
NAME                         READY   STATUS    RESTARTS   AGE
nginx-app-69c694dd64-9sxsl   1/1     Running   0          13m
nginx-app-69c694dd64-rvn4d   1/1     Running   0          13m

查看创建的service

[root@master ~]# kubectl -n apps get svc
NAME        TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)   AGE
nginx-app   ClusterIP   172.16.215.161   <none>        80/TCP    13m

查看创建的ingress规则

[root@master ~]# kubectl -n apps get ingress
NAME        CLASS    HOSTS                     ADDRESS         PORTS   AGE
nginx-app   <none>   demo.apps.cloudcele.com   172.16.94.159   80      13m

查看ingress规则yaml配置:

[root@master ~]# kubectl -n apps get ingress nginx-app -o yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:annotations:meta.helm.sh/release-name: nginx-appmeta.helm.sh/release-namespace: apps
......
spec:rules:- host: demo.apps.cloudcele.comhttp:paths:- backend:service:name: nginx-appport:name: httppath: /pathType: Prefix
status:loadBalancer:ingress:- ip: 172.16.94.159

查看ingress运行配置:

[root@master ~]# kubectl -n apps describe ingress nginx-app
Name:             nginx-app
Namespace:        apps
Address:          172.16.94.159
Default backend:  default-http-backend:80 (<error: endpoints "default-http-backend" not found>)
Rules:Host                     Path  Backends----                     ----  --------demo.apps.cloudcele.com  /   nginx-app:http (10.9.0.6:8080,10.9.0.74:8080)
Annotations:               meta.helm.sh/release-name: nginx-appmeta.helm.sh/release-namespace: apps
Events:Type    Reason  Age                From                      Message----    ------  ----               ----                      -------Normal  Sync    14m (x2 over 15m)  nginx-ingress-controller  Scheduled for syncNormal  Sync    14m (x2 over 15m)  nginx-ingress-controller  Scheduled for sync

使用域名进行访问:

Ingress controller扩容

选择某些worker节点打标签即可:

kubectl label nodes cn-shenzhen.192.168.0.51 node=ingress

由于是daemonset类型,ingress controller pod会自动扩容到打标签的节点

[root@master ~]# kubectl -n ingress-nginx get pods -o wide
NAME                                           READY   STATUS    RESTARTS   AGE    IP             NODE                       NOMINATED NODE   READINESS GATES
nginx-ingress-ingress-nginx-controller-5wbfv   1/1     Running   0          120m   192.168.0.50   cn-shenzhen.192.168.0.50   <none>           <none>
nginx-ingress-ingress-nginx-controller-n2g7n   1/1     Running   0          54s    192.168.0.51   cn-shenzhen.192.168.0.51   <none>           <none>
nginx-ingress-ingress-nginx-controller-q9st2   1/1     Running   0          120m   192.168.0.49   cn-shenzhen.192.168.0.49   <none>           <none>

由多个独占Ingress实例组成统一接入层承载集群入口流量,同时可依据后端业务流量水平扩缩容Ingress节点。当然如果您前期的集群规模并不大,也可以采用将Ingress服务与业务应用混部的方式,但建议进行资源限制和隔离。

参考:https://developer.aliyun.com/article/575996

kubernetes部署Ingress-nginx相关推荐

  1. Kubernetes 部署 Ingress 控制器 Traefik v1.7.4

    标签: kubernetes   ingress   traefik   nginx   haproxy   kong 介绍 Traefik Ingress 对象 上节课我们学习了在Kubernete ...

  2. Kubernetes 部署 Ingress 控制器 Traefik v2.1

    目录[-] . 一.Traefik 简介 . 二.Kubernetes 部署 Traefik . 1.创建 CRD 资源 . 2.创建 RBAC 权限 . 3.创建 Traefik 配置文件 . 4. ...

  3. Kubernetes K8S 1.20部署Ingress nginx 0.30

    主机配置规划 服务器名称(hostname) 系统版本 配置 内网IP 外网IP(模拟) k8s-master CentOS7.7 2C/4G/20G 172.16.1.110 10.0.0.110 ...

  4. k8s部署jar包_使用Kubernetes部署Springboot或Nginx的详细教程

    1 前言 经过<Maven一键部署Springboot到Docker仓库,为自动化做准备>,Springboot的Docker镜像已经准备好,也能在Docker上成功运行了,是时候放上Ku ...

  5. Kubernetes 部署 Traefik Ingress 控制器 (1.7.12)

    目录[-] . 一.Ingress 介绍 . 二.Traefik 介绍 . 三.部署 Ingress 控制器 Traefik . 1.Traefik 两种部署方式介绍 . 2.创建 Traefik 配 ...

  6. k8s 安装ingress nginx controller 并部署.net core ingress服务

    192.168.28.132 k8smaster 192.168.28.133 k8snode1 192.168.28.134 k8snode2 192.168.28.135 k8snode3 192 ...

  7. Kubernetes 初识Ingress Controller以及部署

    在Kubernetes集群中,Ingress对集群服务(Service)中外部可访问的API对象进行管理,提供七层负载均衡能力. Ingress基本概念 在Kubernetes集群中,Ingress作 ...

  8. Kubernetes Ingress Nginx使用

    在此我们不讲述如何部署ingress-controller,只演示如何使用ingress之nginx使用.主要演示如何使用ingress nginx实现我们nginx的多样化配置,从而达到使用ingr ...

  9. CC00296.CloudKubernetes——|KuberNetes运维.V17|——|监控.v03|部署ingress.helm方式|

    一.通过helm安装ingress ### --- 下载ingress版本包 ~~~ 添加ingress的helm仓库[root@k8s-master01 ingress]# helm repo ad ...

  10. 容器化单页面应用中Nginx反向代理与Kubernetes部署

    在<容器化单页面应用中RESTful API的访问>一文中,我介绍了一个在容器化环境中单页面应用访问后端服务的完整案例.这里我将继续使用这个案例,介绍一下容器化单页面应用部署的另一个场景: ...

最新文章

  1. PHP面试内容 整理搜集 PHP面试涉及技术 一文回顾全部 主要含PHP面试命令列表 方法列表...
  2. Java List 分页
  3. HTTP状态保持(cookie、session)
  4. python常见安装
  5. java反射三种方法_Java基础入门要学哪些 怎么掌握反射和枚举
  6. 自编码器图像去噪matlab,深度有趣 | 05 自编码器图像去噪
  7. JavaScript的Math对象使用(1)
  8. java J2EE 分层设计思想及各个文件命名规范
  9. 斐讯K2路由器,版本号V22.6.507.43(最新)刷华硕固件简明教程(附所有工具包)
  10. FDDB--无约束人脸检测数据集
  11. 体制内名校生和普校生发展有无差别?看懂这3个潜规则,越混越好
  12. 【畅捷通T+】登录提示 列“MarketingCloudUserId”不属于表 。
  13. [ECE]模拟试题-7
  14. 图形学创世纪:当科学照进影视与生活
  15. linux环境怎么更新离线rpm包,SUSE Linux 11系统rpm包离线安装GCC
  16. python小练习--GUI基础
  17. getchar ,putchar,gets,puts的辨析
  18. Java程序员必须掌握的线程知识-Callable和Future
  19. 超图结构到底比图结构好在哪里?????
  20. 双十一来袭,想要掌控售卖数据,为何不试试智慧商场可视化系统?

热门文章

  1. 《当时只道是寻常》——安意如——品纳兰容若《饮水词》
  2. 校学 离散数学主析取合取范式 做题心得
  3. C语言的自动关机程序和一个用来整人的小程序
  4. java根据卡号判断银行卡的基本信息
  5. 记一个embed嵌入flash、mp4播放视频
  6. 如何看待爱迪生和特斯拉的直流交流电之争——两种模式的企业管理
  7. python倒排索引
  8. wamp mysql 端口_Wamp修改端口的方法
  9. 利用html编辑信息轰炸机,scratch模拟轰炸机投弹【参考答案】
  10. 算法:凸多边形最优三角剖分