Ingrees-nginx Deployment (Helm)

Ingress-nginx Deployment (Helm)

ingress-nginx 三种常用的部署模式

Deployment+LoadBalancer模式的service
用Deployment部署ingress-controller,创建一个type为LoadBalancer的service关联这组pod。大部分公有云,都会为LoadBalancer的service自动创建一个负载均衡器,通常还绑定了公网地址。只要把域名解析指向改地址,就实现了集群服务的对外暴露。

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

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

ingress-nginx 部署

下载
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
pull ingress-nginx/ingress-nginx --version 4.10.0
tar -zxvf ingress-nginx-4.10.0.tgz
cd ingress-nginx
修改 values.yaml
# 修改镜像
sed -i 's@registry: registry.k8s.io@registry: registry.cn-hangzhou.aliyuncs.com@' values.yaml
sed -i 's@image: ingress-nginx/controller@image: google_containers/nginx-ingress-controller@' values.yaml
sed -i 's@image: ingress-nginx/kube-webhook-certgen@image: google_containers/kube-webhook-certgen@' values.yaml

# 修改 hostNetwork 的值为 true
sed -i 's@hostNetwork: false@hostNetwork: true@' values.yaml

# 修改 dnsPolicy 的值为 ClusterFirstWithHostNet
sed -i 's@dnsPolicy: ClusterFirst@dnsPolicy: ClusterFirstWithHostNet@' values.yaml

# 修改 kind 为:DaemonSet
sed -i 's@kind: Deployment@kind: DaemonSet@' values.yaml

# 修改 tag版本,k8s只支持1.6
sed -i 's@tag: "v1.10.0"@tag: "v1.6.4"@' values.yaml

# 将 service 中的 type 由 LoadBalancer 修改为 ClusterIP,如果服务器是云平台才用 LoadBalancer
sed -i 's@type: LoadBalancer@type: ClusterIP@' values.yaml

# 注释 nginx-ingress-controller、kube-webhook-certgen 的 digest 

# nodeSelector 添加标签: ingress: "true",用于部署 ingress-controller 到指定节点
      nodeSelector:
        kubernetes.io/os: linux
        ingress: "true"
        
# 修改 admissionWebhooks.enabled 为 false
enabled: false
安装
kubectl create namespace ingress-nginx 
# 添加标签: ingress: "true",用于部署 ingress-controller 到指定节点
kubectl label node szzb-bg-dev-etl-9 ingress=true

# Chart.yaml 上级目录下执行
helm install ingress-nginx  -n ingress-nginx   ./ingress-nginx 
# helm uninstall ingress-nginx  -n ingress-nginx

The ingress-nginx controller has been installed.
Get the application URL by running these commands:
  export POD_NAME="$(kubectl get pods --namespace ingress-nginx --selector app.kubernetes.io/name=ingress-nginx,app.kubernetes.io/instance=ingress-nginx,app.kubernetes.io/component=controller --output jsonpath="{.items[0].metadata.name}")"
  kubectl port-forward --namespace ingress-nginx "${POD_NAME}" 8080:80
  echo "Visit http://127.0.0.1:8080 to access your application."
  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值