kubernetes 1.11配置使用nginx ingress

作者: ygqygq2 分类: 云计算/虚拟化,系统/运维 发布时间: 2018-08-24 14:21

kubernetes 1.11配置使用nginx ingress

1. 实验环境说明

2. 暴露服务的方式

由于Pod和Service是kubernetes集群范围内的虚拟概念,所以集群外的客户端系统无法通过Pod的IP地址或者Service的虚拟IP地址和虚拟端口号访问到它们。为了让外部客户端能够访问到这些服务,可以将Pod或Service的端口号映射到宿主机。

  1. 将容器应用的端口号映射到物理机
    1)设置容器级别的hostPort,将容器应用的端口号映射到物理机
    2)设置Pod级别的hostNetwork=true,该Pod中所有容器的端口号都将被直接映射到物理机上

  2. 将Service的端口号映射到物理机
    1)设置nodePort映射到物理机,同时设置Service的类型为NodePort
    2)设置LoadBalancer映射到云服务商提供的LoadBalancer地址

如果设置了Service的nodePort,那么集群会在每一个节点都监听设置的nodePort,外部客户端可以通过任意 nodeIP:Port的方式对集群服务进行访问。但是当集群中服务较多,那么需要管理的端口也会比较多,各个端口之间不能冲突,比较麻烦;另外,因为方式访问形式为nodeIP:Port的方式,那么对于一些HTTP服务,这种方式是无法做到根据URL路径进行转发的。

  1. ingress是kubernetes V1.1版本之后新增的资源对象,用于实现HTTP层业务路由机制。
    实现ingress路由机制主要包括3个组件:
    1)ingress是kubernetes的一个资源对象,用于编写定义规则。
    2)反向代理负载均衡器,通常以Service的Port方式运行,接收并按照ingress定义的规则进行转发,通常为nginx,haproxy,traefik等,本文使用nginx。
    3)ingress-controller,监听apiserver,获取服务新增,删除等变化,并结合ingress规则动态更新到反向代理负载均衡器上,并重载配置使其生效。

3. 安装nginx ingress

一般是以DaemonSet形式在每个node上创建一个资源,然后以hostNetwork的方式开放一个端口。

下面是根据官方只修改了image地址和添加了hostNetwork: true的ingress-control的yaml文件。

4. 使用DaemonSet将ingress control固定pod

DaemonSet能够让所有(或者特定)的节点运行同一个pod。

当节点加入到K8S集群中,pod会被(DaemonSet)调度到该节点上运行,当节点从K8S集群中被移除,被DaemonSet调度的pod会被移除,如果删除DaemonSet,所有跟这个DaemonSet相关的pods都会被删除。

在某种程度上,DaemonSet承担了RC的部分功能,它也能保证相关pods持续运行,如果一个DaemonSet的Pod被杀死、停止、或者崩溃,那么DaemonSet将会重新创建一个新的副本在这台计算节点上。

一般应用于日志收集、监控采集、分布式存储守护进程、ingress等。

Deployment和DaemonSet的区别
Deployment 部署的副本 Pod 会分布在各个 Node 上,每个 Node 都可能运行好几个副本。DaemonSet 的不同之处在于:每个 Node 上最多只能运行一个副本。

主要区别:

  1. The scalability is much better when using a Deployment, because you will have a Single-Pod-per-Node model when using the DaemonSet.
  2. It is possible to exclusively run a Service on a dedicated set of machines using taints and tolerations with a DaemonSet.
  3. On the other hand the DaemonSet allows you to access any Node directly on Port 80 and 443, where you have to setup a Service object with a Deployment.

以下是只使用标签方式,将ingress control固定node。

将要使用的node节点打上标签

修改ingress control的DeploymentDaemonSet,并根据标签使用nodeSelector

5. 配置nginx url转发

以下是配置nginx域名ingress.test.com的url转发规则。

配置好后,kubectl get ing查看结果。

外部通过域名绑定Nginx Ingress controller所在的节点的IP即可访问。

参数资料:
[1] https://kubernetes.io/docs/concepts/services-networking/ingress/
[2] https://github.com/kubernetes/ingress-nginx/blob/master/docs/deploy/index.md
[3] https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/
[4] https://blog.csdn.net/waltonwang/article/details/77587003
[5] https://blog.csdn.net/tiger435/article/details/73650174
[6] http://blog.51cto.com/newfly/2067531

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

发表评论

电子邮件地址不会被公开。 必填项已用*标注