kubernetes ingress(Docker Desktop for Windows 中 Kubernetes 添加 ingress支持)

本文目录
- Docker Desktop for Windows 中 Kubernetes 添加 ingress支持
- Kubernetes 部署配置 Ingress
- k8s 走ingress服务提示文件过大,连接超时等解决方法
- kubernetes安装ingress-nginx
- k8s配置ingress
- k8s ingress 外部域名(External Domains)
Docker Desktop for Windows 中 Kubernetes 添加 ingress支持
***隐藏网址***
确认启动
接下来就可以添加配置暴露service。
记得将host中配置的域名添加到本机的hosts文件中。
Kubernetes 部署配置 Ingress
第一个 vi deploy.yaml 搜索内容 controller:v1.1.1
***隐藏网址***
第二个 vi deploy.yaml 搜索内容 kube-webhook-certgen:v1.1.1
image: k8s.gcr.io/ingress-nginx/kube-webhook-certgen:v1.1.1@sha256:64d8c73dca984af206adf9d6d7e46aa550362b1d7a01f3a0a91b20cc67868660
改成
image: registry.cn-hangzhou.aliyuncs.com/google_containers/kube-webhook-certgen:v1.1.1
第三个 vi deploy.yaml 搜索内容 Deployment
原文
改成
执行安装 kubectl apply -f deploy.yaml
查看ingress命名空间 kubectl get ns
查询安装状态 kubectl get all -n ingress-nginx
错误提示
Error from server (InternalError): error when applying patch:
解决命令: kubectl delete -A ValidatingWebhookConfiguration ingress-nginx-admission
k8s 走ingress服务提示文件过大,连接超时等解决方法
nginx.ingress.kubernetes.io/proxy-body-size: 500m
nginx.ingress.kubernetes.io/proxy-connect-timeout: 180
nginx.ingress.kubernetes.io/proxy-read-timeout: 180
nginx.ingress.kubernetes.io/proxy-write-timeout: 180
kubernetes安装ingress-nginx
注意:如果不加这二个参数,在后续创建自定义的ingress会有如下报错Error from server (InternalError): error when creating "ingress-redirect.yaml": Internal error occurred: failed calliess.kubernetes.io": the server rejected our request for an unknown reason
k8s配置ingress
***隐藏网址***
Ingress是kubernetes集群对外提供服务的一种方式.ingress部署相对比较简单,官方把相关资源配置文件,都已经集合到一个yml文件中(mandatory.yaml),镜像地址也修改为quay.io。
***隐藏网址***
Ingress Contronler 通过与 Kubernetes API 交互,动态的去感知集群中 Ingress 规则变化,然后读取它,按照自定义的规则,规则就是写明了哪个域名对应哪个service,生成一段 Nginx 配置,再写到 Nginx-ingress-control的 Pod 里,这个 Ingress Contronler 的pod里面运行着一个nginx服务,控制器会把生成的nginx配置写入/etc/nginx.conf文件中,然后 reload 一下 使用配置生效。以此来达到域名分配置及动态更新的问题。
192.168.3.100 www.tchua.top
***隐藏网址***
上面我们只是解决了集群对外提供服务的功能,并没有对ingress进行高可用的部署,Ingress高可用,我们可以通过修改deployment的副本数来实现高可用,但是由于ingress承载着整个集群流量的接入,所以生产环境中,建议把ingress通过DaemonSet的方式部署集群中,而且该节点打上污点不允许业务pod进行调度,以避免业务应用与Ingress服务发生资源争抢。然后通过SLB把ingress节点主机添为后端服务器,进行流量转发。
修改参数如下:
这里我在2台master节点部署(生产环境不要使用master节点,应该部署在独立的节点上),因为我们采用DaemonSet的方式,所以我们需要对2个节点打标签以及容忍度。
这里直接使用上面创建的pod及对应svc测试即可,另外注意一点,因为我们创建的ingress-controller采用的时hostnetwork模式,所以无需在创建ingress-svc服务来把端口映射到节点主机上。
在win主机上直接解析,IP地址为k8s-master03/k8s-master02 任意节点ip即可,访问的时候也无需再加端口
备用镜像
k8s ingress 外部域名(External Domains)
这里涉及两个知识点。第一个是ingress ,第二个是external domains。ingress 大家可能比较熟悉,比如下面的配置,访问hello-world.info的域名,请求”/“目录,将会把请求转发到web 这个服务。
external domains大家可能不经常使用,这个是k8s 提供的CNAME能力,比如下面通过外部域名的功能,为my-service 的域名增加一个 my.database.example.com的CNAME,这样当我们在容器里面访问 my-service域名的时候,域名解析到CNAME my.database.example.com,从而将请求转发到 my.database.example.com 。
但外部域名有个小问题,就是它只是重定向域名,并不会修改 HTTP header,这就导致一个问题:请求url 里面域名和header中的域名不一致。而ingress 大部分都是HTTP 请求。比如下面service 的定义。
当通过 my-sample.com 请求ingress的时候,ingress转发请求的时候, HTTP HOST header 还是my-sample.com,但上面设置的外部域名是 example.com,这就导致不一致了,nginx无法转发流量。
但我们还可以通过 nginx.ingress.kubernetes.io/upstream-vhost 这个annotation修改我们的请求header,如上面例子,我们将请求header的HOST 修改成 example.com 就可以成功请求了。

更多文章:
数据库管理系统和数据库系统分别侧重(数据库,数据库管理系统,数据库系统,这三个分别是什么意思并举个实例)
2026年9月7日 17:00
springmvc的依赖(springMVC的注入方式有哪几种,这与springMVC依赖)
2026年9月7日 14:00
display flex 自动换行(overflow-y:hidden;overflow-x:auto;无效解决方法)
2026年9月7日 11:00
timestamp without time zone(Postgresql中to_date()函数使用问题)
2026年9月7日 09:40






