【Kubernetes系列】第6篇 Ingress controller - nginx组件介绍

简介: 1. 概述在上一篇文章中我们介绍了如何通过helm进行安装部署traefik组件,文中还提到常用的ingress controller除了traefik还有Nginx、HAProxy、Kong等,在本篇文章中我们就介绍如何安装部署Nginx-ingress,只有在经过积累不同组件的使用经验之后,我们才能更好的比较其优劣,形成最佳实践。

1. 概述

在上一篇文章中我们介绍了如何通过helm进行安装部署traefik组件,文中还提到常用的ingress controller除了traefik还有Nginx、HAProxy、Kong等,在本篇文章中我们就介绍如何安装部署Nginx-ingress,只有在经过积累不同组件的使用经验之后,我们才能更好的比较其优劣,形成最佳实践。

2. nginx-ingress组件的安装部署

2.1 通过helm查找nginx-ingress

# step1: 通过helm查找nginx-ingress
> helm search nginx-ingress
> helm inspect stable/nginx-ingress

2.2 镜像下载及上传

部分企业由于服务器没有外网访问策略以及防火墙的原因无法获取国外Docker镜像,所以我们事先需要将所需镜像准备好,并上传到企业私有镜像仓库。

# step2: 镜像准备
> docker pull quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.25.1
> docker tag quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.25.1 registry.hankercloud.com/ingress-controller/nginx-ingress-controller:0.25.1
> docker push registry.hankercloud.com/ingress-controller/nginx-ingress-controller:0.25.1
> 
> docker pull k8s.gcr.io/defaultbackend-amd64:1.5
> docker tag k8s.gcr.io/defaultbackend-amd64:1.5 registry.hankercloud.com/google_containers/defaultbackend-amd64:1.5
> docker push registry.hankercloud.com/google_containers/defaultbackend-amd64:1.5

2.3 组件部署

在上一篇博客中,我们是采用Deployment模式部署的traefik组件,这次我们采用DaemonSet的模式来部署nginx-ingress组件。

# step3: 组件部署 
> helm install stable/nginx-ingress --name nginx-ingress --namespace=kube-system \
    --set fullnameOverride=nginx-ingress \
    --set controller.kind=DaemonSet \
    --set controller.daemonset.useHostPort=true \
    --set controller.metrics.enabled=true \
    --set controller.image.repository=registry.hankercloud.com/ingress-controller/nginx-ingress-controller \
    --set defaultBackend.image.repository=registry.hankercloud.com/google_containers/defaultbackend-amd64
# step4: 检查部署是否成功
> helm list
> kubectl get all -n kube-system 
> kubectl logs $POD_NAME -n kube-system   

2.4 负载均衡配置及域名解析处理

本次我们采用DaemonSet部署nginx-ingress组件,并且使用了主机的80和443接口用来分别接收http和https请求,我们将相应的域名解析到nginx-ingress Pod所在的主机IP之后,就可以通过域名来进行相应的域名访问了。

但上述配置方式无法做到高可用,当nginx-ingress的Pod实例故障或者其所在主机发生故障时,会导致相应的域名无法访问,所以建议在公有云购买负载均衡设备并配置相应的后端服务器列表以实现高可用的目的。

2.5 安装调试

在上文中我们通过helm部署了一个wordpress应用,本文我们继续通过该应用进行域名访问,在本机控制台输入 > curl -i http://10.0.0.182 -H 'Host: blog.hankercloud.com',如果看到有正常返回则说明部署成功。

3. 企业场景及解决方案

3.1 如何做内外网的隔离

  • Step1: 我们首先部署了两个ingress组件,其中之一是接收内网访问请求,另外一个是接收外网访问请求,相应配置如下:
# 内网nginx-ingress配置声明:
spec:
  template:
    spec:
      containers:
      - args:
        - /nginx-ingress-controller
        - --default-backend-service=kube-system/nginx-ingress-default-backend
        - --election-id=ingress-controller-leader
        - --ingress-class=nginx
        - --configmap=kube-system/nginx-ingress-controller
# 外网nginx-ingress配置声明:
spec:
  template:
    spec:
      containers:
      - args:
        - /nginx-ingress-controller
        - --default-backend-service=kube-system/nginx-ingress-external-default-backend
        - --election-id=ingress-controller-leader
        - --ingress-class=nginx-external
        - --configmap=kube-system/nginx-ingress-external-controller

两者的主要区别在于参数 --ingress-class 设置的值是不一样的

  • Step2: 对于需要暴露到公网的域名,修改其ingress的定义,相应配置参考如下:
metadata:
  name: www
  annotations:
    kubernetes.io/ingress.class: "nginx-external"
  • Step3: 检查是否配置成功,执行 kubectl exec ${POD_NAME} -n kube-system cat /etc/nginx/nginx.conf 查看配置文件中是否已经包含外网域名的相关配置,并在本地进行测试验证

4. 参考资料

https://kubernetes.github.io/ingress-nginx/deploy/

https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
8月前
|
Kubernetes 安全 应用服务中间件
IngressNightmare:Ingress Nginx 再曝5个安全漏洞,可接管你的 K8s 集群
是否还记得 2022 年 K8s Ingress Nginx 披露了的 3 个高危安全漏洞(CVE-2021-25745, CVE-2021-25746, CVE-2021-25748),并在那一年宣布停止接收新功能 PR,专注修复并提升稳定性。
|
Kubernetes 应用服务中间件 nginx
k8s学习--YAML资源清单文件托管服务nginx
k8s学习--YAML资源清单文件托管服务nginx
284 2
k8s学习--YAML资源清单文件托管服务nginx
|
Kubernetes 监控 测试技术
k8s学习--基于Ingress-nginx实现灰度发布系统
k8s学习--基于Ingress-nginx实现灰度发布系统
572 2
k8s学习--基于Ingress-nginx实现灰度发布系统
|
Kubernetes 负载均衡 应用服务中间件
k8s学习--ingress详细解释与应用(nginx ingress controller))
k8s学习--ingress详细解释与应用(nginx ingress controller))
2238 0
|
Kubernetes 应用服务中间件 nginx
k8s基础使用--使用k8s部署nginx服务
本文介绍了Kubernetes中核心概念Deployment、Pod与Service的基本原理及应用。Pod作为最小调度单元,用于管理容器及其共享资源;Deployment则负责控制Pod副本数量,确保其符合预期状态;Service通过标签选择器实现Pod服务的负载均衡与暴露。此外,还提供了具体操作步骤,如通过`kubectl`命令创建Deployment和Service,以及如何验证其功能。实验环境包括一台master节点和两台worker节点,均已部署k8s-1.27。
1120 1
|
NoSQL 网络协议 应用服务中间件
redis,memcached,nginx网络组件
redis,memcached,nginx网络组件
122 0
|
存储 应用服务中间件 nginx
nginx数据结构组件二
nginx数据结构组件二
119 0
|
3月前
|
编解码 应用服务中间件 Linux
centos配置nginx-rtmp实现ffmpeg转码rtsp为rtmp视频流
centos配置nginx-rtmp实现ffmpeg转码rtsp为rtmp视频流
347 1
|
7月前
|
应用服务中间件 Linux 网络安全
Centos 8.0中Nginx配置文件和https正书添加配置
这是一份Nginx配置文件,包含HTTP与HTTPS服务设置。主要功能如下:1) 将HTTP(80端口)请求重定向至HTTPS(443端口),增强安全性;2) 配置SSL证书,支持TLSv1.1至TLSv1.3协议;3) 使用uWSGI与后端应用通信(如Django);4) 静态文件托管路径设为`/root/code/static/`;5) 定制错误页面(404、50x)。适用于Web应用部署场景。
742 87
|
7月前
|
负载均衡 应用服务中间件 nginx
Nginx配置与命令
Nginx 是一款高性能的 HTTP 和反向代理服务器,其配置文件灵活且功能强大。本文介绍了 Nginx 配置的基础结构和常用指令,包括全局块、Events 块、HTTP 块及 Server 块的配置方法,以及静态资源服务、反向代理、负载均衡、HTTPS 和 URL 重写等功能实现。此外,还提供了常用的 Nginx 命令操作,如启动、停止、重载配置和日志管理等,帮助用户高效管理和优化服务器性能。