【Kubernetes系列】第6篇 Ingress controller - nginx组件介绍-阿里云开发者社区

开发者社区> robbin.pang> 正文

【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/

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
angular定制组件-toastr(消息提醒)
toastr是一个消息提醒工具。 需要的文件 angular-toastr.js angular-toastr.css angular把toastr封装成一个module,使用更方便。 用法 //定义模块时引入依赖 angular .module('myApp', [ 'ui.bootstrap', 'toastr' ]); //定义控制器时传入
1941 0
uni-app自定义组件模式开发注意事项
uni-app 自 1.8版本开始,新增支持自定义组件模式,该编译模式组件性能更高,支持更多的Vue语法。 请开发者尽快升级老版项目为自定义组件模式,老版的模板编译模式将不再维护。 Tips: uni-app 不同编译模式差异,参考:https://ask.
8755 0
Kubernetes监控之Heapster介绍
什么是Heapster? Heapster是容器集群监控和性能分析工具,天然的支持Kubernetes和CoreOS。 Kubernetes有个出名的监控agent---cAdvisor。在每个kubernetes Node上都会运行cAdvisor,它会收集本机以及容器的监控数据(cpu,memory,filesystem,network,uptime)。
1102 0
实时计算Flink on Kubernetes产品模式介绍
Flink产品介绍 目前实时计算的产品已经有两种模式,即共享模式和独享模式。这两种模式都是全托管方式,这种托管方式下用户不需要关心整个集群的运维。其次,共享模式和独享模式使用的都是Blink引擎。这两种模式为用户提供的主要功能也类似, 都提供开发控制台; 开发使用的都是Blink SQL,其中独享模式由于进入了用户的VPC,部署在用户的ECS上,因此可以使用很多底层的API,如UDX; 都提供一套的开箱即用的metric收集、展示功能; 都提供作业监控和报警功能。
4671 0
TSharding:用于蘑菇街交易平台的分库分表组件
tsharding TSharding is the simple sharding component used in mogujie trade platform. 分库分表业界方案 分库分表TSharding TSharding组件目标 很少的资源投入即可开发完成...
1581 0
React 中的 定义组件的 两种方式
React 中创建 Components 的方式有两种:Function and Class 定义一个组件最简单的方法就是写一个 JavaScript 函数 function Welcome(props) { return Hello, {props.name} } 因为Welcome函数接受单个携带数据的props对象并且返回一个React元素,所以它就是一个组件。
901 0
kubernetes kube-dns service 介绍
kube-dns 是 kubernetes 基于 DNS 的服务发现模块,主要由三个容器组成,分别是 dnsmasq, kube-dns, sidecar,整体的结构如图。 sidecar sidecar 是一个监控健康模块,同时向外暴露metrics 记录,但是为啥叫三蹦子不知道。
1967 0
+关注
13
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载