美文网首页微服务架构和实践Kubernetes
k8s使用kube-router构建高可用可扩展ingress

k8s使用kube-router构建高可用可扩展ingress

作者: 647f379ea944 | 来源:发表于2018-08-12 09:35 被阅读0次

    简介

    使用kube-router实现k8s集群的ingress功能,高可用易扩展

    环境说明

    本实验在已经安装配置好k8s集群基础之上进行实验,k8s安装参考博客其他文章。lab4作为一个路由器,转发lab5的请求

    实验架构

    lab1: master 11.11.11.111
    lab2: node 11.11.11.112
    lab3: node 11.11.11.113
    lab4: router 11.11.11.114
    lab5: client 11.11.11.115
    

    安装

    # 本次实验重新创建了集群,使用之前测试其他网络插件的集群环境没有成功
    # 可能是由于环境干扰,实验时需要注意
    
    # 创建kube-router目录下载相关文件
    mkdir kube-router && cd kube-router
    rm -f generic-kuberouter-all-features-dsr.yaml
    wget https://raw.githubusercontent.com/mgxian/kube-router/master/generic-kuberouter-all-features-dsr.yaml
    
    # 启用pod网络通信,网络隔离策略,服务代理所有功能
    # CLUSTERCIDR kube-controller-manager 启动参数 --cluster-cidr 的值
    # APISERVER kube-apiserver 启动参数 --advertise-address 值
    CLUSTERCIDR='10.244.0.0/16'
    APISERVER='https://11.11.11.111:6443'
    sed -i "s;%APISERVER%;$APISERVER;g" generic-kuberouter-all-features-dsr.yaml
    sed -i "s;%CLUSTERCIDR%;$CLUSTERCIDR;g" generic-kuberouter-all-features-dsr.yaml
    
    # 修改配置
          containers:
          - name: kube-router
            image: cloudnativelabs/kube-router
            imagePullPolicy: Always
            args:
            ...
            - --peer-router-ips=11.11.11.114
            - --peer-router-asns=64513
            - --cluster-asn=64512
            - --advertise-external-ip=true
            ...
    
    # 部署
    kubectl apply -f generic-kuberouter-all-features-dsr.yaml
    
    # 删除kube-proxy
    kubectl -n kube-system delete ds kube-proxy
    
    # 在每个节点上执行
    # 如果是二进制安装使用如下命令
    systemctl stop kube-proxy
    
    # 在每个节点上执行
    # 清理kube-proxy留下的规则
    docker run --privileged --net=host registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy-amd64:v1.10.2 kube-proxy --cleanup
    
    # 查看
    kubectl get pods -n kube-system
    kubectl get svc -n kube-system
    

    测试

    # 测试之前请先安装配置好kube-dns或者coredns
    
    # 启动用于测试的deployment
    kubectl run nginx --replicas=2 --image=nginx:alpine --port=80
    kubectl expose deployment nginx --type=NodePort --name=example-service-nodeport
    kubectl expose deployment nginx --name=example-service
    
    # 查看
    kubectl get pods -o wide
    kubectl get svc -o wide
    
    # dns及访问测试
    kubectl run curl --image=radial/busyboxplus:curl -i --tty
    nslookup kubernetes
    nslookup example-service
    curl example-service
    

    在lab4配置quagga

    # 安装
    yum install -y quagga
    
    # 配置
    cat >/etc/quagga/bgpd.conf<<EOF
    ! -*- bgp -*-
    !
    ! BGPd sample configuratin file
    !
    ! $Id: bgpd.conf.sample,v 1.1 2002/12/13 20:15:29 paul Exp $
    !
    hostname lab4
    password password
    !
    router bgp 64513
      bgp router-id 11.11.11.114
      maximum-paths 4
      neighbor 11.11.11.111 remote-as 64512
      neighbor 11.11.11.112 remote-as 64512
      neighbor 11.11.11.113 remote-as 64512
    log stdout
    EOF
    
    # 启动
    systemctl start bgpd
    systemctl status bgpd
    systemctl enable bgpd
    
    # 查看路由信息
    ip route
    

    在lab4测试

    # 在lab1上修改 example-service 配置 external ip
    kubectl edit svc example-service
    ...
    spec:
      clusterIP: 10.111.34.147
      externalIPs:
      - 11.11.111.111
    ...
    
    # 在lab1上查看svc信息
    # 可以看到 example-service 有了 external ip
    kubectl get svc
    
    # 查看lab4路由
    # 可以看到有 11.11.111.111 相关的路由
    ip route
    
    # 在lab4上访问测试
    curl 11.11.111.111
    

    在lab5测试

    # 在lab5添加路由
    ip route add 11.11.111.111 via 11.11.11.114
    ip route
    
    # 在lab5访问测试
    curl 11.11.111.111
    
    # 在lab1查看ipvs
    ipvsadm -L -n
    

    使用DSR

    # DSR实验没有成功,实验环境是vagrant配合virtualbox
    # 在lab1设置 example-service 使用 DSR 模式
    # 服务的响应直接发送到客户端不经过lvs中转
    kubectl annotate svc example-service "kube-router.io/service.dsr=tunnel"
    
    # 在lab1查看ipvs
    # 可以看到 Tunnel 转发类型
    ipvsadm -L -n
    
    # 在lab5访问测试
    curl 11.11.111.111
    
    # 在集群中的节点抓包分析
    tcpdump -i kube-bridge proto 4
    

    清理

    # 清理
    kubectl delete svc example-service example-service-nodeport
    kubectl delete deploy nginx curl
    

    参考文档

    相关文章

      网友评论

        本文标题:k8s使用kube-router构建高可用可扩展ingress

        本文链接:https://www.haomeiwen.com/subject/wntsbftx.html