一个计算机技术爱好者与学习者

0%

好好学K8S:Ingress配置使用宿主机80/443端口

1. 前言

《K8S中安装使用Ingress》一文中,我们安装配置了Ingress。
安装Ingress后,默认的服务端口是NodePort,范围 30000-32767 。因为端口不是80和443,所以我们无法直接把域名解析到节点IP上,上层还需要增加一个LB或者Nginx进行转发。而增加了上层,整个链路就变长了,增加了响应耗时和出现问题的概率。

本文中,我们学习一种Ingress配置方法,能够使Ingress直接使用宿主机的80和443端口。

2. 安装配置思路

K8S中有一个机制是 hostNetwork,允许Pod使用宿主机网络,也就是说可以直接将Pod的80和443直接绑定到K8S宿主机网络上。
基于此,可以使用 DaemonSet+hostNetwork 部署Ingress。

参考文档:

3. 安装配置实践

1、添加chart仓库

1
2
3
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update
helm repo list

2、下载chart(chart4.1.4 对应 app1.2.1)

1
2
3
4
helm search repo ingress-nginx/ingress-nginx -l
helm fetch ingress-nginx/ingress-nginx --version 4.1.4
tar -xzvf ingress-nginx-4.1.4.tgz
vim ingress-nginx/values.yaml

3、修改 values.yaml 配置

  • controller.image.registry:改为k8s.dockerproxy.com
  • controller.image.tag:保持不变v1.2.1
  • controller.image.digest:注释掉
  • controller.image.digestChroot:注释掉
  • controller.admissionWebhooks.enabled:保持 true,避免创建的错误 Ingress 等资源对象影响控制器重新加载
  • defaultBackend.enabled:按需修改
  • controller.hostNetwork:改为 true
  • controller.publishService.enabled:改为 false
  • controller.dnsPolicy:改为 ClusterFirstWithHostNet
  • controller.kind:改为 DaemonSet
  • controller.nodeSeletor:按需修改
  • controller.tolerations:按需修改
  • controller.service.enabled:改为 false

4、安装ingress nginx controller

1
2
helm install ingress-nginx ingress-nginx -n ingress-nginx --create-namespace --dry-run --debug
helm install ingress-nginx ingress-nginx -n ingress-nginx --create-namespace

5、查看安装

1
2
kubectl get all -n ingress-nginx
kubectl get ingressclass