Deployment+Loadbalancer部署ingress-controller

目录

上传并更改ingress-nginx的配置文件

创建测试pod

创建ingress

查看LoadBalancer的EXTERNAL-IP

测试

总结


上传并更改ingress-nginx的配置文件

#>>> 拉取ingress-nginx的yaml文件
wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.3.0/deploy/static/provider/cloud/deploy.yaml

#>>> 配置文件要修改的部分我会打上标记

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app.kubernetes.io/component: controller
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
    app.kubernetes.io/version: 1.3.0
  name: ingress-nginx-controller
  namespace: ingress-nginx
spec:
  replicas: 2              #这里增加pod的副本
  minReadySeconds: 0
  revisionHistoryLimit: 10

#>>> 来到Deployment的Service

apiVersion: v1
kind: Service
metadata:
  labels:
    app.kubernetes.io/component: controller
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
    app.kubernetes.io/version: 1.3.0
  name: ingress-nginx-controller
  namespace: ingress-nginx
spec:
  externalTrafficPolicy: Cluster   #这里改成Cluster!!!

image:复制粘贴即可

anjia0532/google-containers.ingress-nginx.controller:v1.3.0

anjia0532/google-containers.ingress-nginx.kube-webhook-certgen:v1.1.1

externalTrafficPolicy的意思是流量策略。默认这里是Local,意思是只有拥有这个pod的节点才能访问,其他节点一律不会有LVS去帮你转发过去。Cluster意思是所有节点都可以访问你的pod。

 配置成Cluster主要是因为我的metallb用的是layer2的方式,这个方式下它不会正确帮我代理到能响应pod的节点上,所有的请求都流入leader节点,在由leader节点转发,如果我的leader节点没有LVS的转发那么这个请求失败。

所以我让策略变成Cluster,所有节点都存在着LVS代理到pod后端的IP,不用管leader到底是在哪个节点。但是这种方式会让集群内部多上多层转发。

创建测试pod

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-app
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx
          imagePullPolicy: IfNotPresent
          ports:
            - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: nginx-app-svc
spec:
  ports:
  - protocol: TCP
    port: 80
  selector:
    app: nginx

创建ingress

---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: nginx-app-ingress
  annotations:
    kubernetes.io/ingress.class: "nginx"   #指定ingress-controller的类名
spec:
  rules:
  - host: www.aaa.com      #外部访问域名
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: nginx-app-svc  #绑定前面的service
            port:
              number: 80

查看LoadBalancer的EXTERNAL-IP

 自己在/etc/hosts文件中将你的EXTERNAL-IP和前面的访问域名做解析

测试

总结

整体的架构呢是nginx-ingress的service的LoadBalancerIP去代理到我的nginx-ingress-controller的两个pod。ingress-nginx内部的配置文件呢会设置代理到我测试pod的service后端。

截图为证,这是lvs配置后端是controller的两个pod IP

 kubectl exec -it -n ingress-nginx <you-controller-name> -- cat /etc/nginx/nginx.conf | grep -B 5 <you-test-pod-service-name>

运行上面的命令即可

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值