kubernetes部署Ingress-nginx
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相关推荐
- Kubernetes 部署 Ingress 控制器 Traefik v1.7.4
标签: kubernetes ingress traefik nginx haproxy kong 介绍 Traefik Ingress 对象 上节课我们学习了在Kubernete ...
- Kubernetes 部署 Ingress 控制器 Traefik v2.1
目录[-] . 一.Traefik 简介 . 二.Kubernetes 部署 Traefik . 1.创建 CRD 资源 . 2.创建 RBAC 权限 . 3.创建 Traefik 配置文件 . 4. ...
- 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 ...
- k8s部署jar包_使用Kubernetes部署Springboot或Nginx的详细教程
1 前言 经过<Maven一键部署Springboot到Docker仓库,为自动化做准备>,Springboot的Docker镜像已经准备好,也能在Docker上成功运行了,是时候放上Ku ...
- Kubernetes 部署 Traefik Ingress 控制器 (1.7.12)
目录[-] . 一.Ingress 介绍 . 二.Traefik 介绍 . 三.部署 Ingress 控制器 Traefik . 1.Traefik 两种部署方式介绍 . 2.创建 Traefik 配 ...
- 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 ...
- Kubernetes 初识Ingress Controller以及部署
在Kubernetes集群中,Ingress对集群服务(Service)中外部可访问的API对象进行管理,提供七层负载均衡能力. Ingress基本概念 在Kubernetes集群中,Ingress作 ...
- Kubernetes Ingress Nginx使用
在此我们不讲述如何部署ingress-controller,只演示如何使用ingress之nginx使用.主要演示如何使用ingress nginx实现我们nginx的多样化配置,从而达到使用ingr ...
- CC00296.CloudKubernetes——|KuberNetes运维.V17|——|监控.v03|部署ingress.helm方式|
一.通过helm安装ingress ### --- 下载ingress版本包 ~~~ 添加ingress的helm仓库[root@k8s-master01 ingress]# helm repo ad ...
- 容器化单页面应用中Nginx反向代理与Kubernetes部署
在<容器化单页面应用中RESTful API的访问>一文中,我介绍了一个在容器化环境中单页面应用访问后端服务的完整案例.这里我将继续使用这个案例,介绍一下容器化单页面应用部署的另一个场景: ...
最新文章
- PHP面试内容 整理搜集 PHP面试涉及技术 一文回顾全部 主要含PHP面试命令列表 方法列表...
- Java List 分页
- HTTP状态保持(cookie、session)
- python常见安装
- java反射三种方法_Java基础入门要学哪些 怎么掌握反射和枚举
- 自编码器图像去噪matlab,深度有趣 | 05 自编码器图像去噪
- JavaScript的Math对象使用(1)
- java J2EE 分层设计思想及各个文件命名规范
- 斐讯K2路由器,版本号V22.6.507.43(最新)刷华硕固件简明教程(附所有工具包)
- FDDB--无约束人脸检测数据集
- 体制内名校生和普校生发展有无差别?看懂这3个潜规则,越混越好
- 【畅捷通T+】登录提示 列“MarketingCloudUserId”不属于表 。
- [ECE]模拟试题-7
- 图形学创世纪:当科学照进影视与生活
- linux环境怎么更新离线rpm包,SUSE Linux 11系统rpm包离线安装GCC
- python小练习--GUI基础
- getchar ,putchar,gets,puts的辨析
- Java程序员必须掌握的线程知识-Callable和Future
- 超图结构到底比图结构好在哪里?????
- 双十一来袭,想要掌控售卖数据,为何不试试智慧商场可视化系统?