Kubernetes从0到1-第三篇 安装Nginx-ingress

2024-05-31 07:38

本文主要是介绍Kubernetes从0到1-第三篇 安装Nginx-ingress,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

    • 简介
    • 使用MetalLB搭建负载均衡
    • 部署ingress-nginx
    • 测试

简介

在Kubernetes中,服务和Pod的IP地址仅可以在集群网络内部使用,对于集群外的应用是不可见的。为了使外部的应用能够访问集群内的服务,在Kubernetes中目前提供了以下几种方案:

  • NodePort
  • LoadBalancer
  • Ingress

NodePort,简单来说,就是通过service这种资源对象,为后端pod提供一个统一的访问接口,然后将service的统一访问接口映射到群集节点上,最终实现client通过映射到群集节点上的端口访问到后端pod提供的服务。

但是,这种方式有一个弊端,就是当新生成一个pod服务就需要创建对应的service将其映射到节点端口,当运行的pod过多时,我们节点暴露给client端的端口也会随之增加,这样我们整个k8s群集的危险系数就会增加,因为我们在搭建群集时,官方明确指出,必须关闭firewalld防火墙及清空iptables规则,现在我们又暴露了那么多端口给client,安全性可想而知。

一些云供应商,提供SLB产品,省去很多配置工作,简化应用过程,本文通过自己搭建LB服务器实现Nginx ingress功能。

裸金属kubernetes集群不支持LoadBalance,裸机群集运营商留下了两个较小的工具来将用户流量带入其集群,“NodePort”和“externalIPs”服务。这两种选择都对生产使用产生了重大影响,这使得裸露的金属集群成为Kubernetes生态系统中的二等公民。

但是就是想用LoadBalancer来实现,怎么办?

使用MetalLB搭建负载均衡

  1. 添加chart仓库
helm repo add metallb https://metallb.github.io/metallb
helm repo update
helm pull metallb/metallb
tar -xvf metallb-0.10.2.tgz && cd metallb
  1. 修改values.yaml
...
configInline: address-pools:- name: defaultprotocol: layer2addresses:- 192.168.238.155-192.168.238.160  # 负载均衡地址池
...

还可以配置基于公网的负载均衡,大家可以自己扩展下。

  1. 安装
helm install metallb . -n kube-system -f ./values.yaml
  1. 查看pod状态
kubectl get pods -n kube-system | grep metallb
metallb-controller-589cd5bc9-c7cll                 1/1     Running   0          82s
metallb-speaker-dxcqd                              1/1     Running   0          82s
metallb-speaker-l5bvr                              1/1     Running   0          82s
metallb-speaker-p84nf                              1/1     Running   0          82s

部署ingress-nginx

  1. 添加chart仓库
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update
helm pull ingress-nginx/ingress-nginx --version 3.36.0
tar -xvf ingress-nginx-3.36.0.tgz && cd ingress-nginx
  1. 修改values.yaml
...
controller:name: controllerimage:registry: willdockerhub  # 修改镜像仓库image: ingress-nginx-controllertag: "v0.49.0"# digest: sha256:057ae3bb99b73af87b2cd25da4a861bfb02c2193aba8bec2b0f91e58e98527c5replicaCount: 2service:loadBalancerSourceRanges: ["192.168.238.0/24"]
defaultBackend:image:registry: mirrorgooglecontainersimage: defaultbackend-amd64tag: "1.5"
  1. 安装
helm install ingress-nginx  . -f ./values.yaml -n kube-system
  1. 查看pod状态
kubectl get pods -n kube-system | grep nginx
ingress-nginx-controller-69776d86b7-nnx2z          1/1     Running   0          3m3s
ingress-nginx-controller-69776d86b7-xqtzn          1/1     Running   0          108s
ingress-nginx-defaultbackend-7f9c5b58b5-ztz9j      1/1     Running   0          9m39s
  1. 查看svc
kubectl get svc -n kube-system | grep nginx
ingress-nginx-controller             LoadBalancer   10.1.248.157   192.168.238.156   80:30232/TCP,443:30701/TCP   60m
ingress-nginx-controller-admission   ClusterIP      10.1.187.75    <none>            443/TCP                      60m
ingress-nginx-defaultbackend         ClusterIP      10.1.124.153   <none>            80/TCP                       60m
...

测试

  1. 安装tomcat测试
helm search repo tomcathelm pull bitnami/tomcattar -xvf tomcat-9.2.26.tgz && cd tomcat
  1. 修改values.yaml
replicaCount: 2
ingress:enabled: truehostname: tomcat.demo.com
  1. 部署tomcat
helm install tomcat . -f values.yaml -n test01
  1. 查看pod状态
kubectl get pods -n test01
NAME                      READY   STATUS    RESTARTS   AGE
tomcat-697685bcd9-kqpzz   1/1     Running   0          43m
tomcat-697685bcd9-xsts4   1/1     Running   0          43m
  1. 查看ingress
kubectl get ingress -n test01
Warning: extensions/v1beta1 Ingress is deprecated in v1.14+, unavailable in v1.22+; use networking.k8s.io/v1 Ingress
NAME     CLASS    HOSTS             ADDRESS           PORTS   AGE
tomcat   <none>   tomcat.demo.com   192.168.238.156   80      41m
  1. 访问测试

配置本地hosts文件, 192.168.238.156 tomcat.demo.com

如图:
在这里插入图片描述

参考文档:
[1]: https://github.com/kubernetes/ingress-nginx
[2]: https://github.com/kubernetes/ingress-nginx/tree/main/charts/ingress-nginx
[3]: https://metallb.universe.tf/installation/
[4]: https://metallb.universe.tf/configuration/

这篇关于Kubernetes从0到1-第三篇 安装Nginx-ingress的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1017577

相关文章

Python安装时常见报错以及解决方案

《Python安装时常见报错以及解决方案》:本文主要介绍在安装Python、配置环境变量、使用pip以及运行Python脚本时常见的错误及其解决方案,文中介绍的非常详细,需要的朋友可以参考下... 目录一、安装 python 时常见报错及解决方案(一)安装包下载失败(二)权限不足二、配置环境变量时常见报错及

nginx部署https网站的实现步骤(亲测)

《nginx部署https网站的实现步骤(亲测)》本文详细介绍了使用Nginx在保持与http服务兼容的情况下部署HTTPS,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值... 目录步骤 1:安装 Nginx步骤 2:获取 SSL 证书步骤 3:手动配置 Nginx步骤 4:测

MySQL8.2.0安装教程分享

《MySQL8.2.0安装教程分享》这篇文章详细介绍了如何在Windows系统上安装MySQL数据库软件,包括下载、安装、配置和设置环境变量的步骤... 目录mysql的安装图文1.python访问网址2javascript.点击3.进入Downloads向下滑动4.选择Community Server5.

Windows设置nginx启动端口的方法

《Windows设置nginx启动端口的方法》在服务器配置与开发过程中,nginx作为一款高效的HTTP和反向代理服务器,被广泛应用,而在Windows系统中,合理设置nginx的启动端口,是确保其正... 目录一、为什么要设置 nginx 启动端口二、设置步骤三、常见问题及解决一、为什么要设置 nginx

CentOS系统Maven安装教程分享

《CentOS系统Maven安装教程分享》本文介绍了如何在CentOS系统中安装Maven,并提供了一个简单的实际应用案例,安装Maven需要先安装Java和设置环境变量,Maven可以自动管理项目的... 目录准备工作下载并安装Maven常见问题及解决方法实际应用案例总结Maven是一个流行的项目管理工具

nginx-rtmp-module模块实现视频点播的示例代码

《nginx-rtmp-module模块实现视频点播的示例代码》本文主要介绍了nginx-rtmp-module模块实现视频点播,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习... 目录预置条件Nginx点播基本配置点播远程文件指定多个播放位置参考预置条件配置点播服务器 192.

MySql9.1.0安装详细教程(最新推荐)

《MySql9.1.0安装详细教程(最新推荐)》MySQL是一个流行的关系型数据库管理系统,支持多线程和多种数据库连接途径,能够处理上千万条记录的大型数据库,本文介绍MySql9.1.0安装详细教程,... 目录mysql介绍:一、下载 Mysql 安装文件二、Mysql 安装教程三、环境配置1.右击此电脑

在 Windows 上安装 DeepSeek 的完整指南(最新推荐)

《在Windows上安装DeepSeek的完整指南(最新推荐)》在Windows上安装DeepSeek的完整指南,包括下载和安装Ollama、下载DeepSeekRXNUMX模型、运行Deep... 目录在www.chinasem.cn Windows 上安装 DeepSeek 的完整指南步骤 1:下载并安装

nginx-rtmp-module构建流媒体直播服务器实战指南

《nginx-rtmp-module构建流媒体直播服务器实战指南》本文主要介绍了nginx-rtmp-module构建流媒体直播服务器实战指南,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有... 目录1. RTMP协议介绍与应用RTMP协议的原理RTMP协议的应用RTMP与现代流媒体技术的关系2

Kubernetes常用命令大全近期总结

《Kubernetes常用命令大全近期总结》Kubernetes是用于大规模部署和管理这些容器的开源软件-在希腊语中,这个词还有“舵手”或“飞行员”的意思,使用Kubernetes(有时被称为“... 目录前言Kubernetes 的工作原理为什么要使用 Kubernetes?Kubernetes常用命令总