前言

原来我们需要将端口号对外暴露,通过 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相关推荐

  1. Kubernetes Nginx Ingress 安装与使用

    2019独角兽企业重金招聘Python工程师标准>>> Kubernetes Nginx Ingress 安装与使用 博客分类: Kubernetes 目录 (Table of Co ...

  2. kubernetes的ingress:Ingress controller,traefik

    文章目录 Ingress介绍 nginx ingress controller ingress URL Rewrite Basic Auth 灰度发布等各种发布方式 HTTPS CertManager ...

  3. 干货分享:如何使用Kubernetes的Ingress API

    导语 以Kubernetes的Kong为例,聊聊当前流行的开源且与云无关的Ingress控制器. 正文 您可以通过使用诸如Kong for Kubernetes的Ingress控制器(使用自定义资源定 ...

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

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

  5. 6、kubernetes 核心技术-Pod

    文章目录 一.Pod 概述 1.1 Pod 基本概念 二.Pod存在的意义 三.Pod实现机制 3.1 共享网络 3.2 共享存储 四.Pod镜像拉取策略 五.Pod资源限制 六.Pod 生命周期和重 ...

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

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

  7. 13、Kubernetes核心技术Helm

    文章目录 一.为什么引入Helm 二.Helm介绍 三.Helm组件及架构 四.Helm v3变化 五.helm仓库 六.使用helm快速部署应用 6.1 使用命令搜索应用 6.2 根据搜索内容选择安 ...

  8. 7、kubernetes 核心技术-Controller 控制器

    文章目录 一.什么是Controller? 二.Pod和Controller的关系 三.Deployment控制器应用场景 四.Deployment控制器部署应用 4.1 导出yaml文件 4.2 使 ...

  9. Kubernetes Nginx Ingress教程

    最近发现好多人问Ingress,同时一直也没去用Nginx的Ingress,索性捣鼓一把,发现跟原来确实有了点变化,在这里写篇文章记录一下 一.Ingress介绍 Kubernetes暴露服务的方式目 ...

最新文章

  1. java系统高并发解决方案
  2. django构建网页_如何使用Django构建照片供稿
  3. 腾讯 tars java_腾讯TARS开源团队郑苏波:腾讯微服务开发框架的源码剖析
  4. html中隐式转换成数字,关于 JS 类型隐式转换的完整总结
  5. oracle mysql 线程数_oracle线程数更改
  6. MapXtreme2005开发的经典问题
  7. java影院座位订票代码_基于jsp的影院订票-JavaEE实现影院订票 - java项目源码
  8. 数据分析方法(营销模型篇)--最全的9种分析方法
  9. python爬取设置了权限的qq空间_日常用Python来监控女神QQ空间!就算他把我屏蔽,也阻止不了我!-qq空间怎么设置访问权限...
  10. ps怎么缩放图层大小_Photoshop如何调整图层大小?PS调整图层大小快捷键
  11. 什么是项目管理?怎么管?(一)
  12. Windows 自带计算器的使用
  13. 个人知识管理PKM:收集、消化、应用、创新
  14. 高空核爆与雷电电磁脉冲特征及能量吸收技术(摘要)
  15. 转载一些关于QQ空间的文章
  16. 5G原理,5G给生活的影响,5G影响的行业
  17. 没有50W彩礼 女友被强行拽走! Python分析全国彩礼情况,心凉了!
  18. 华视身份证读卡器网页信息采集失灵处理办法
  19. 在mysql中如何为连接添加索引_在MySQL中如何为连接添加索引
  20. 虚拟运营商APN、SPN参数、Sim卡名称

热门文章

  1. R语言构建混淆矩阵(仿真数据)并基于混淆矩阵(confusion matrix)计算并计算Accuracy、Precision、Recall(sensitivity)、F1、Specificity指标
  2. GLM+广义线性模型
  3. java中打开文件显示_从java程序中打开任何文件
  4. php mysqli参数,PHP5 mysqli 绑定参数
  5. matplotlib库之patch
  6. postgresql
  7. 第三代测序单分子荧光测序之Pacbio 测序原理
  8. 汇编语言课本习题 p112 3.30
  9. access mysql字段对应_ACCESS数据库中表与字段名称修改
  10. 三十四、动态规划解决01背包问题