ingress使用HostNetwork部署

1.三种常用的部署模式
1.1 Deployment+LoadBalancer模式的service

用Deployment部署igress-controller,创建一个type为LoadBalancer的service关联这组pod。大部分公有云,都会为LoadBalancer的service自动创建一个负载均衡器,通常还绑定了公网地址。只要把域名解析指向改地址,就实现了集群服务的对外暴露。但是需要购买云服务商的负载均衡, 个人使用比较昂贵。

1.2 Deployment+NodePort模式的service

同样用deployment模式部署ingress-controller,然后创建对应的ingress svc,type为NodePort。这样,ingress就会暴露在集群节点ip的特定端口上。由于nodeport暴露的端口是随机端口,一般会在前面再搭建一套负载均衡器来转发请求。改方式一般用于宿主机是相对固定的环境ip地址不变的场景。
NodePort方式暴露ingress虽然简单方便,但是NodePort多了一层NAT,在请求量级很大时可能对性能会有一定的影响

1.3 DaemonSet+HostNetwork(+nodeSelector)

用DaemonSet 结合nodeselector来部署ingress-controller到特定的Node上,然后使用HostNetwork直接把该pod与宿主机node的网络打通,直接使用宿主机的80/443端口就能访问服务。此方式整个请求链路最简单,性能相对nodeport模式更好。缺点是由于直接利用宿主机节点的网络和端口,一个node只能部署一个ingress-controller pod。比较适合大并发的生产环境使用。

后续使用就使用第三种方案

2.根据k8s版本选择对应ingress版本

ingress-nginx地址 https://github.com/kubernetes/ingress-nginx

SupportedIngress-NGINX versionk8s supported versionAlpine VersionNginx VersionHelm Chart Version
🔄v1.11.11.30, 1.29, 1.28, 1.27, 1.263.20.01.25.54.11.1
🔄v1.11.01.30, 1.29, 1.28, 1.27, 1.263.20.01.25.54.11.0
🔄v1.10.31.30, 1.29, 1.28, 1.27, 1.263.20.01.25.54.10.3
🔄v1.10.21.30, 1.29, 1.28, 1.27, 1.263.20.01.25.54.10.2
🔄v1.10.11.30, 1.29, 1.28, 1.27, 1.263.19.11.25.34.10.1
🔄v1.10.01.29, 1.28, 1.27, 1.263.19.11.25.34.10.0
v1.9.61.29, 1.28, 1.27, 1.26, 1.253.19.01.21.64.9.1
v1.9.51.28, 1.27, 1.26, 1.253.18.41.21.64.9.0
v1.9.41.28, 1.27, 1.26, 1.253.18.41.21.64.8.3
v1.9.31.28, 1.27, 1.26, 1.253.18.41.21.64.8.*
v1.9.11.28, 1.27, 1.26, 1.253.18.41.21.64.8.*
v1.9.01.28, 1.27, 1.26, 1.253.18.21.21.64.8.*
v1.8.41.27, 1.26, 1.25, 1.243.18.21.21.64.7.*
v1.7.11.27, 1.26, 1.25, 1.243.17.21.21.64.6.*
v1.6.41.26, 1.25, 1.24, 1.233.17.01.21.64.5.*
v1.5.11.25, 1.24, 1.233.16.21.21.64.4.*
v1.4.01.25, 1.24, 1.23, 1.223.16.21.19.10†4.3.0
v1.3.11.24, 1.23, 1.22, 1.21, 1.203.16.21.19.10†4.2.5

比如我使用的是1.8.1, 对应地址是

https://github.com/kubernetes/ingress-nginx/blob/controller-v1.8.1/deploy/static/provider/cloud/deploy.yaml
3.下载后修改以下信息
3.1 ingress-nginx-controller type改为 NodePort

image-20240730151937728

3.2 Deployment 改为 DaemonSet

image-20240730152105927

3.3 有三处镜像改为国内镜像
image: registry.cn-hangzhou.aliyuncs.com/google_containers/nginx-ingress-controller:v1.8.1

image-20240730152159733

image: registry.cn-hangzhou.aliyuncs.com/google_containers/kube-webhook-certgen:v20230407

image-20240730152230992

image: registry.cn-hangzhou.aliyuncs.com/google_containers/kube-webhook-certgen:v20230407

image-20240730152320594

4.部署
kubectl apply -f deploy.yaml

建议重启dns解析,我使用的版本安装后出现找不到服务的情况

kubectl rollout restart deployment coredns -n kube-system
  • 11
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!要在Kubernetes部署Ingress使用它,您可以按照以下步骤进行操作: 1. 确保已经安装了Kubernetes集群,并且具有管理员权限。 2. 首先,需要安装一个Ingress控制器。Ingress控制器是负责处理Ingress资源并将请求路由到相应的服务的组件。常见的Ingress控制器有Nginx Ingress Controller、Traefik、HAProxy Ingress等。您可以选择其中一个并按照其文档进行安装。 3. 安装Ingress Controller后,您需要定义一个Ingress资源来配置路由规则。Ingress资源是Kubernetes中定义路由规则的一种方式。下面是一个示例的Ingress资源定义: ``` apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: my-ingress spec: rules: - host: example.com http: paths: - path: / pathType: Prefix backend: service: name: my-service port: number: 80 ``` 上述示例中,定义了一个名为`my-ingress`的Ingress资源,将`example.com/`请求路由到名为`my-service`的后端服务的80端口。 4. 创建或更新Ingress资源,并将其应用到集群中: ``` $ kubectl apply -f ingress.yaml ``` 5. 确保Ingress Controller已经正确地将流量路由到您的服务。您可以使用以下命令检查Ingress资源和Ingress Controller的状态: ``` $ kubectl get ingress $ kubectl get pods -n <ingress-namespace> ``` 其中,`<ingress-namespace>`是Ingress控制器所在的命名空间。 这样,您就可以通过Ingress来访问您的服务了。请注意,您还需要确保域名解析正确,并将域名指向集群中Ingress Controller的IP地址。 希望这些信息能对您有所帮助!如果您有任何其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值