专栏首页深入浅出微服务及云原生技术【Kubernetes系列】第7篇 Ingress controller - nginx组件介绍
原创

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

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/

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

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

    为了能够让Ingress资源能够工作,在Kubernetes集群中必须至少有一个运行中的ingress controller组件。也就是说如果在kubernet...

    HankerCloud
  • 【Kubernetes系列】第5篇 Kubernetes包管理工具-helm介绍

    Helm是kubernetes包管理工具,可以方便快捷的安装、管理、卸载kubernetes应用,类似于Linux操作系统中yum或apt-get软件的作用。其...

    HankerCloud
  • 搭建npm私有镜像仓库,天下苦于npm build久矣

    当你的研发团队越来越大,或是你无法忍受node超慢的构建时你可以考虑继续读下去,给大家推荐一个基于Verdaccio相对较完整的解决方案。

    HankerCloud
  • 七层调度:ingress 资源及 Ingress Controller 控制器

    使用 Service NodePort 可以实现 IP:端口 对外访问,通过任意 Node 节点可访问对应的资源,这意味着每个端口只能使用一次,一个端口对应一个...

    懒人的小脑
  • 开发部署移动APP如何选择腾讯云服务器配置?

    开发部署移动APP如何选择腾讯云服务器配置呢?随着移动互联网的飞速发展,智能手机的逐渐普及,现在大部分人用的手机都是智能手机,大家在手机上安装自己喜欢和常用的a...

    用户5920959
  • 开发部署移动APP如何选择腾讯云服务器配置?

    开发部署移动APP如何选择腾讯云服务器配置呢?随着移动互联网的飞速发展,智能手机的逐渐普及,现在大部分人用的手机都是智能手机,大家在手机上安装自己喜欢和常用的a...

    用户2416682
  • 深度学习与人工智能技术趋势

    看一下AI系统,今天所有的应用,不管是影像、声音或者是图像的识别,或者一种语言翻译到另外一种语言,以及测试等,这些都是AI的一些特点。AI要实现这些特点都需要去...

    刀刀老高
  • 炸锅了!Google称2029年人类开始实现永生不死!疾病,衰老,痛苦将彻底消失!?

    “在我看来,到了2029年左右,人类会来到一个临界点。每过一年,人类的寿命能够延长一年,这要得益于科学技术到那个时间的发展。

    华章科技
  • 谷歌未来学家:人类实现永生,在2029年以后将不再是梦想

    这个世界上最公平的,恐怕就是生老病死了。即使一个人一生的成就再大,财富再多,最终都敌不过自然规律,走向死亡。

    钱塘数据
  • 【PAT乙级】数字加密

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    喜欢ctrl的cxk

扫码关注云+社区

领取腾讯云代金券