12、Kubernetes核心技术Ingress
前言
原来我们需要将端口号对外暴露,通过 ip + 端口号就可以进行访问
原来是使用Service中的NodePort来实现
- 在每个节点上都会启动端口
- 在访问的时候通过任何节点,通过ip + 端口号就能实现访问
但是NodePort还存在一些缺陷
- 因为端口不能重复,所以每个端口只能使用一次,一个端口对应一个应用
- 实际访问中都是用域名,根据不同域名跳转到不同端口服务中
一、Ingress和Pod关系
pod 和 ingress 是通过service进行关联的,而ingress作为统一入口,由service关联一组pod中
- 首先service就是关联我们的pod
- 然后ingress作为入口,首先需要到service,然后发现一组pod
- 发现pod后,就可以做负载均衡等操作
二、Ingress工作流程
在实际的访问中,我们都是需要维护很多域名, a.com 和 b.com
然后不同的域名对应的不同的Service,然后service管理不同的pod
需要注意,ingress不是内置的组件,需要我们单独的安装
三、使用Ingress
步骤如下所示
- 部署ingress Controller【需要下载官方的】
- 创建ingress规则【对哪个Pod、名称空间配置规则】
3.1 创建Nginx Pod
创建一个nginx应用,然后对外暴露端口
# 创建pod
[root@k8s-master ~]$ kubectl create deployment web --image=nginx# 查看
[root@k8s-master ~]$ kubectl get pods
对外暴露端口
[root@k8s-master ~]$ kubectl expose deployment web --port=80 --target-port=80 --type:NodePort
3.2 部署 ingress controller
通过yaml的方式,部署ingress
[root@k8s-master ~]$ cat > ingress-con.yaml << EOF
apiVersion: v1
kind: Namespace
metadata:name: ingress-nginxlabels:app.kubernetes.io/name: ingress-nginxapp.kubernetes.io/part-of: ingress-nginx---kind: ConfigMap
apiVersion: v1
metadata:name: nginx-configurationnamespace: ingress-nginxlabels:app.kubernetes.io/name: ingress-nginxapp.kubernetes.io/part-of: ingress-nginx---
kind: ConfigMap
apiVersion: v1
metadata:name: tcp-servicesnamespace: ingress-nginxlabels:app.kubernetes.io/name: ingress-nginxapp.kubernetes.io/part-of: ingress-nginx---
kind: ConfigMap
apiVersion: v1
metadata:name: udp-servicesnamespace: ingress-nginxlabels:app.kubernetes.io/name: ingress-nginxapp.kubernetes.io/part-of: ingress-nginx---
apiVersion: v1
kind: ServiceAccount
metadata:name: nginx-ingress-serviceaccountnamespace: ingress-nginxlabels:app.kubernetes.io/name: ingress-nginxapp.kubernetes.io/part-of: ingress-nginx---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole
metadata:name: nginx-ingress-clusterrolelabels:app.kubernetes.io/name: ingress-nginxapp.kubernetes.io/part-of: ingress-nginx
rules:- apiGroups:- ""resources:- configmaps- endpoints- nodes- pods- secretsverbs:- list- watch- apiGroups:- ""resources:- nodesverbs:- get- apiGroups:- ""resources:- servicesverbs:- get- list- watch- apiGroups:- ""resources:- eventsverbs:- create- patch- apiGroups:- "extensions"- "networking.k8s.io"resources:- ingressesverbs:- get- list- watch- apiGroups:- "extensions"- "networking.k8s.io"resources:- ingresses/statusverbs:- update---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: Role
metadata:name: nginx-ingress-rolenamespace: ingress-nginxlabels:app.kubernetes.io/name: ingress-nginxapp.kubernetes.io/part-of: ingress-nginx
rules:- apiGroups:- ""resources:- configmaps- pods- secrets- namespacesverbs:- get- apiGroups:- ""resources:- configmapsresourceNames:# Defaults to "<election-id>-<ingress-class>"# Here: "<ingress-controller-leader>-<nginx>"# This has to be adapted if you change either parameter# when launching the nginx-ingress-controller.- "ingress-controller-leader-nginx"verbs:- get- update- apiGroups:- ""resources:- configmapsverbs:- create- apiGroups:- ""resources:- endpointsverbs:- get---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: RoleBinding
metadata:name: nginx-ingress-role-nisa-bindingnamespace: ingress-nginxlabels:app.kubernetes.io/name: ingress-nginxapp.kubernetes.io/part-of: ingress-nginx
roleRef:apiGroup: rbac.authorization.k8s.iokind: Rolename: nginx-ingress-role
subjects:- kind: ServiceAccountname: nginx-ingress-serviceaccountnamespace: ingress-nginx---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:name: nginx-ingress-clusterrole-nisa-bindinglabels:app.kubernetes.io/name: ingress-nginxapp.kubernetes.io/part-of: ingress-nginx
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: nginx-ingress-clusterrole
subjects:- kind: ServiceAccountname: nginx-ingress-serviceaccountnamespace: ingress-nginx---apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-ingress-controllernamespace: ingress-nginxlabels:app.kubernetes.io/name: ingress-nginxapp.kubernetes.io/part-of: ingress-nginx
spec:replicas: 1selector:matchLabels:app.kubernetes.io/name: ingress-nginxapp.kubernetes.io/part-of: ingress-nginxtemplate:metadata:labels:app.kubernetes.io/name: ingress-nginxapp.kubernetes.io/part-of: ingress-nginxannotations:prometheus.io/port: "10254"prometheus.io/scrape: "true"spec:hostNetwork: true# wait up to five minutes for the drain of connectionsterminationGracePeriodSeconds: 300serviceAccountName: nginx-ingress-serviceaccountnodeSelector:kubernetes.io/os: linuxcontainers:- name: nginx-ingress-controllerimage: lizhenliang/nginx-ingress-controller:0.30.0args:- /nginx-ingress-controller- --configmap=$(POD_NAMESPACE)/nginx-configuration- --tcp-services-configmap=$(POD_NAMESPACE)/tcp-services- --udp-services-configmap=$(POD_NAMESPACE)/udp-services- --publish-service=$(POD_NAMESPACE)/ingress-nginx- --annotations-prefix=nginx.ingress.kubernetes.iosecurityContext:allowPrivilegeEscalation: truecapabilities:drop:- ALLadd:- NET_BIND_SERVICE# www-data -> 101runAsUser: 101env:- name: POD_NAMEvalueFrom:fieldRef:fieldPath: metadata.name- name: POD_NAMESPACEvalueFrom:fieldRef:fieldPath: metadata.namespaceports:- name: httpcontainerPort: 80protocol: TCP- name: httpscontainerPort: 443protocol: TCPlivenessProbe:failureThreshold: 3httpGet:path: /healthzport: 10254scheme: HTTPinitialDelaySeconds: 10periodSeconds: 10successThreshold: 1timeoutSeconds: 10readinessProbe:failureThreshold: 3httpGet:path: /healthzport: 10254scheme: HTTPperiodSeconds: 10successThreshold: 1timeoutSeconds: 10lifecycle:preStop:exec:command:- /wait-shutdown---apiVersion: v1
kind: LimitRange
metadata:name: ingress-nginxnamespace: ingress-nginxlabels:app.kubernetes.io/name: ingress-nginxapp.kubernetes.io/part-of: ingress-nginx
spec:limits:- min:memory: 90Micpu: 100mtype: Container
EOF
hostNetwork: true,改成ture是为了让后面访问到
[root@k8s-master ~]$ kubectl apply -f ingress-con.yaml
查看是否成功部署 ingress
[root@k8s-master ~]$ kubectl get pods -n ingress-nginx
3.3 创建ingress规则文件
创建ingress规则文件,ingress-http.yaml
[root@k8s-master ~]$ cat > ingress-http.yaml << EOF
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:name: example-ingress
spec:rules:- host: example.ingredemo.com #域名http:paths:- path: /backend:serviceName: webservicePort: 80 #端口
EOF[root@k8s-master ~]$ kubectl apply -f ingress-http.yaml
3.4 添加域名访问规则
在windows 的 C:\Windows\System32\drivers\etc\hosts
文件,添加域名访问规则
192.168.88.10 example.ingredemo.com
12、Kubernetes核心技术Ingress相关推荐
- Kubernetes Nginx Ingress 安装与使用
2019独角兽企业重金招聘Python工程师标准>>> Kubernetes Nginx Ingress 安装与使用 博客分类: Kubernetes 目录 (Table of Co ...
- kubernetes的ingress:Ingress controller,traefik
文章目录 Ingress介绍 nginx ingress controller ingress URL Rewrite Basic Auth 灰度发布等各种发布方式 HTTPS CertManager ...
- 干货分享:如何使用Kubernetes的Ingress API
导语 以Kubernetes的Kong为例,聊聊当前流行的开源且与云无关的Ingress控制器. 正文 您可以通过使用诸如Kong for Kubernetes的Ingress控制器(使用自定义资源定 ...
- Kubernetes 部署 Ingress 控制器 Traefik v1.7.4
标签: kubernetes ingress traefik nginx haproxy kong 介绍 Traefik Ingress 对象 上节课我们学习了在Kubernete ...
- 6、kubernetes 核心技术-Pod
文章目录 一.Pod 概述 1.1 Pod 基本概念 二.Pod存在的意义 三.Pod实现机制 3.1 共享网络 3.2 共享存储 四.Pod镜像拉取策略 五.Pod资源限制 六.Pod 生命周期和重 ...
- Kubernetes 部署 Ingress 控制器 Traefik v2.1
目录[-] . 一.Traefik 简介 . 二.Kubernetes 部署 Traefik . 1.创建 CRD 资源 . 2.创建 RBAC 权限 . 3.创建 Traefik 配置文件 . 4. ...
- 13、Kubernetes核心技术Helm
文章目录 一.为什么引入Helm 二.Helm介绍 三.Helm组件及架构 四.Helm v3变化 五.helm仓库 六.使用helm快速部署应用 6.1 使用命令搜索应用 6.2 根据搜索内容选择安 ...
- 7、kubernetes 核心技术-Controller 控制器
文章目录 一.什么是Controller? 二.Pod和Controller的关系 三.Deployment控制器应用场景 四.Deployment控制器部署应用 4.1 导出yaml文件 4.2 使 ...
- Kubernetes Nginx Ingress教程
最近发现好多人问Ingress,同时一直也没去用Nginx的Ingress,索性捣鼓一把,发现跟原来确实有了点变化,在这里写篇文章记录一下 一.Ingress介绍 Kubernetes暴露服务的方式目 ...
最新文章
- java系统高并发解决方案
- django构建网页_如何使用Django构建照片供稿
- 腾讯 tars java_腾讯TARS开源团队郑苏波:腾讯微服务开发框架的源码剖析
- html中隐式转换成数字,关于 JS 类型隐式转换的完整总结
- oracle mysql 线程数_oracle线程数更改
- MapXtreme2005开发的经典问题
- java影院座位订票代码_基于jsp的影院订票-JavaEE实现影院订票 - java项目源码
- 数据分析方法(营销模型篇)--最全的9种分析方法
- python爬取设置了权限的qq空间_日常用Python来监控女神QQ空间!就算他把我屏蔽,也阻止不了我!-qq空间怎么设置访问权限...
- ps怎么缩放图层大小_Photoshop如何调整图层大小?PS调整图层大小快捷键
- 什么是项目管理?怎么管?(一)
- Windows 自带计算器的使用
- 个人知识管理PKM:收集、消化、应用、创新
- 高空核爆与雷电电磁脉冲特征及能量吸收技术(摘要)
- 转载一些关于QQ空间的文章
- 5G原理,5G给生活的影响,5G影响的行业
- 没有50W彩礼 女友被强行拽走! Python分析全国彩礼情况,心凉了!
- 华视身份证读卡器网页信息采集失灵处理办法
- 在mysql中如何为连接添加索引_在MySQL中如何为连接添加索引
- 虚拟运营商APN、SPN参数、Sim卡名称
热门文章
- R语言构建混淆矩阵(仿真数据)并基于混淆矩阵(confusion matrix)计算并计算Accuracy、Precision、Recall(sensitivity)、F1、Specificity指标
- GLM+广义线性模型
- java中打开文件显示_从java程序中打开任何文件
- php mysqli参数,PHP5 mysqli 绑定参数
- matplotlib库之patch
- postgresql
- 第三代测序单分子荧光测序之Pacbio 测序原理
- 汇编语言课本习题 p112 3.30
- access mysql字段对应_ACCESS数据库中表与字段名称修改
- 三十四、动态规划解决01背包问题