Kubernetes中Ingress介绍
发表于:2024-11-24 作者:千家信息网编辑
千家信息网最后更新 2024年11月24日,如何暴露您Kubernetes集群内部 "应用服务" 并向外(互联网)提供访问服务!!!通常情况下集群内部Service和Pod仅可在集群内部网络中通过IP地址访问。所有到达边界路由器的流量或被丢弃或
千家信息网最后更新 2024年11月24日Kubernetes中Ingress介绍
如何暴露您Kubernetes集群内部 "应用服务" 并向外(互联网)提供访问服务!!!
- 通常情况下集群内部Service和Pod仅可在集群内部网络中通过IP地址访问。所有到达边界路由器的流量或被丢弃或被转发到其它地方。(Ingress 的存在即是完成以上之目的)
- 不直接使用Ingress资源,也可有多种方法暴露Service。
- 使用 Service.Type=LoadBalancer
- 使用 Service.Type=NodePort
- 有几个是废弃的
- 未定义Ingress的情况下,外部请求访问内部服务时可能这样
Internet ---------> Service
- 定义Ingress授权请求服务入站连接到达集群的规访问则可能这样
Internet ------> Ingress ------> Service
Ingress 它能做什么
- 可以将 Ingress 配置为提供服务外部可访问的 URL、负载均衡流量、终止 SSL / TLS 并提供基于名称的虚拟主机。Ingress 控制器通常负责通过负载均衡器来实现 Ingress,尽管它也可以配置边缘路由器或其他前端来帮助处理流量。
- Ingress 不会公开任意端口或协议。 将 HTTP 和 HTTPS 以外的服务公开到 Internet 时,通常使用 Service.Type=NodePort 或者 Service.Type=LoadBalancer 类型的服务,典型的访问方式是 "HTTP"。
- 先决条件:
- 您必须具有 ingress 控制器才能满足 Ingress 的要求。仅创建 Ingress 资源无效,比如ingress-nginx。
- 一定要检查一下控制器的 beta 限制。 在 GCE/GKE 之外的环境中,需要将控制器部署 为 Pod。
- 默认后段:
- 如果没有主机或路径与 Ingress 对象中的 HTTP 请求匹配,则流量将路由到您的默认后端。
- 默认后端通常是 Ingress 控制器的配置选项,并且未在 Ingress 资源中指定。
- 更多更详细的Ingress描述及使用方法 参考中文官方 Ingress 文档
Ingress 控制器
- 想让Ingress资源工作您单独部署个Ingress没有用,您得部署一个Ingress Controller来实现Ingress。
- 与作为 kube-controller-manager 可执行文件的一部分运行的其他类型的控制器不同,Ingress 控制器不是随集群自动启动的。 基于此页面,您可选择最适合您的集群的 Ingress 控制器实现。
- Kubernetes 作为一个项目,目前支持和维护 GCE 和 nginx 控制器。
- 您可以在集群中部署和使用多个 Ingress 控制器,创建Ingress时使用 "ingress.class" 进行注释。
- 更多更详细的控制器使用可 参考中文官方 Ingress controller 描述
多个Ingress控制器并存的示例
多个控制器切换使用,修改红色字体即可
apiVersion: extensions/v1beta1kind: Ingressmetadata: name: test annotations: kubernetes.io/ingress.class: "nginx"spec: tls: - secretName: tls-secret backend: serviceName: echoheaders-https servicePort: 80
haproxy-ingress参考 haproxy-ingress in github
在使用kubeadm工具部署的集群下部署Ingress-nginx
- Github站点:
https://github.com/kubernetes/ingress-nginxhttps://github.com/kubernetes/ingress-nginx/blob/master/docs/deploy/index.md
- Kubernetes站点:
https://kubernetes.github.io/ingress-nginx/https://kubernetes.github.io/ingress-nginx/deploy/
- 命令帮助
rules:规则的对象列表,谁调度到谁那里去(路径调度、主机调度)
backend:调度到后端相关pod资源,关联后段Pod,serviceName、servicePort
[root@node1 ~]# kubectl explain ingress.spec[root@node1 ~]# kubectl explain ingress.spec.rules
- 下载安装nginx-ingress-controller
需提前下载镜像到本地,或者改用阿里云镜像
[root@node1 ingress]# wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.27.1/deploy/static/mandatory.yaml[root@node1 ingress]# kubectl apply -f mandatory.yaml[root@node1 ingress]# kubectl get pods -n ingress-nginxNAME READY STATUS RESTARTS AGEnginx-ingress-controller-948ffd8cc-9nd4c 1/1 Running 0 10m[root@node1 ingress]# [root@node1 ingress]# kubectl describe pods -n ingress-nginx
- 创建一个Pod类型为NodePort的service用来接入互联网请求
修改yaml文件可添加nodePort来指定端口,这里采用默认
[root@node1 ingress]# wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.27.1/deploy/static/provider/baremetal/service-nodeport.yaml[root@node1 ingress]# kubectl apply -f service-nodeport.yaml service/ingress-nginx created[root@node1 ingress]# [root@node1 ingress]# kubectl get svc -n ingress-nginxNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEingress-nginx NodePort 10.99.146.223 80:32116/TCP,443:30771/TCP 17s[root@node1 ingress]#
- 通过互联网测试访问,看nginx的调度器是否配置成功
任意集群地址访问
[root@node1 ingress]# curl 172.12.0.10:32116404 Not Found 404 Not Found
nginx/1.17.7 [root@node1 ingress]#
Nginx调度器本身调度已经可以正常工作了!!!
Nginx调度器本身调度已经可以正常工作了!!!
Nginx调度器本身调度已经可以正常工作了!!!
接下来就可以手动部署个应用,并通过nginx的调度器发布出去
手动部署tomcat应用服务,通过nginx调度器发布出去
- NodePort类型的Tomcat创建
把资源都写在一个yaml文件内,使用三条横线进行分割
[root@node1 pod]# cat tomcat-nodeport.yaml apiVersion: v1kind: Servicemetadata: name: tomcat namespace: defaultspec: selector: app: tomcat release: canary type: NodePort ports: - port: 8080 targetPort: 8080 nodePort: 30080---apiVersion: apps/v1kind: Deploymentmetadata: name: tomcat-demo namespace: defaultspec: replicas: 2 selector: matchLabels: app: tomcat release: canary template: metadata: labels: app: tomcat release: canary spec: containers: - name: tomcat image: tomcat imagePullPolicy: IfNotPresent ports: - name: http containerPort: 8080 - name: ajp containerPort: 8009[root@node1 pod]#
直接使用集群内部任意IP地址加30080端口进行访问即可。
- 通过Ingress形式发布Tomcat至外部
提前下载好tomcat镜像到本地,service资源和deploy资源写在一个yaml文件内
[root@node1 pod]# cat deploy-svc-tomcat.yaml apiVersion: v1kind: Servicemetadata: name: tomcatspec: selector: app: tomcat release: canary ports: - name: http targetPort: 8080 port: 8080---apiVersion: apps/v1kind: Deploymentmetadata: name: tomcat-demospec: replicas: 2 selector: matchLabels: app: tomcat release: canary template: metadata: labels: app: tomcat release: canary spec: containers: - name: tomcat8 image: tomcat imagePullPolicy: IfNotPresent ports: - name: http containerPort: 8080[root@node1 pod]#
创建完成后,接下来就可以为刚刚部署的tomcat制作一个ingress服务了
- 为ingress类型的tomcat创建ingress服务
您也可以创建带ssl认证证书类型的tomcat服务,只需要购买ssl证书或只为了测试自建证书也可
[root@node1 pod]# cat tomcat-ingress.yaml apiVersion: extensions/v1beta1kind: Ingressmetadata: name: ingress-tomcat namespace: default annotations: kubernetes.io/ingress.class: "nginx"spec: rules: - host: tomcat.siyou.com http: paths: - path: backend: serviceName: tomcat servicePort: 8080[root@node1 pod]#
测试吧。配置好"tomcat.siyou.com"的解析,访问的时候通过ingress调度器映射出去的端口访问即可
- 为了测试会用到的相关命令
kubectl 的相关资源使用帮助 # kubectl explain pods or kubectl explain pods.spec
# 获取默认空间下的pods资源详情[root@node1 pod]# kubectl get pods -o wide# 描述默认空间下某个pods资源[root@node1 pod]# kubectl describe pods tomcat-demo-655c78c49-ctd66# 查看某个tomcat的日志,实时查看[root@node1 pod]# kubectl logs tomcat-demo-655c78c49-ctd66 -f# 查看默认空间下tomcat应用端口监听状态[root@node1 pod]# kubectl exec tomcat-demo-655c78c49-ctd66 -- ss -tnl# 进入到一个tomcat内部[root@node1 pod]# kubectl exec -it tomcat-demo-655c78c49-ctd66 -- /bin/sh# 查看默认名称空间下的service详情[root@node1 pod]# kubectl get svc -o wide# 获取名称空间为ingress-nginx下的pod资源情况[root@node1 pod]# kubectl get pods -n ingress-nginx# 查看ingress-nginx空间下pod详情[root@node1 pod]# kubectl describe pods -n ingress-nginx nginx-ingress-controller-948ffd8cc-9nd4c# 查看默认名称空间下的ingress[root@node1 pod]# kubectl get ingress
更多 kubectl 命令的使用,"kubectl --help" 或者官方文档 k8s kubectl overview
控制器
控制
调度
资源
服务
集群
空间
类型
端口
配置
名称
文件
流量
工作
应用
测试
主机
互联网
命令
地址
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
数据库中对象包括
plc数据接入云服务器数据分析
运维数据库待遇
镇江网络营销软件开发业务流程
南宁网络技术有限
游戏软件开发怎么创新
疫情防护期间网络安全教育
搭建xmpp服务器
网络安全 运维 资质
表格怎么快捷选中数据库
通信网络技术专业
如何查看电脑服务器启动类型
最干净代理服务器
万德数据库优势
日本自动化服务器
软件开发 案由
文件服务器系统除了群晖还有什么
广州科创软件开发有限公司
软件开发公司属于
和网络安全相关的开题报告
软件开发公司防止程序泄露
软件开发项目兼职
桌面小软件开发用什么语言
破解access数据库
我的世界海贼王服务器
数控编程和软件开发一样吗
疫情期间网络安全风险研判
药品不良反应报告数据库
软件开发工程师绩效标准
无锡市智企网络技术