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

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: 简介 使用kube-router实现k8s集群的ingress功能,高可用易扩展 环境说明 本实验在已经安装配置好k8s集群基础之上进行实验,k8s安装参考博客其他文章。lab4作为一个路由器,转发lab5的请求 实验架构 lab1: master 11.

简介

使用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
复制代码

参考文档

  • https://cloudnativelabs.github.io/post/2017-11-01-kube-high-available-ingress/
  • https://github.com/cloudnativelabs/kube-router/blob/master/docs/generic.md

本文转自掘金- k8s使用kube-router构建高可用可扩展ingress
相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
17天前
|
弹性计算 人工智能 Serverless
阿里云ACK One:注册集群云上节点池(CPU/GPU)自动弹性伸缩,助力企业业务高效扩展
在当今数字化时代,企业业务的快速增长对IT基础设施提出了更高要求。然而,传统IDC数据中心却在业务存在扩容慢、缩容难等问题。为此,阿里云推出ACK One注册集群架构,通过云上节点池(CPU/GPU)自动弹性伸缩等特性,为企业带来全新突破。
|
9天前
|
运维 Kubernetes Docker
利用Docker和Kubernetes构建微服务架构
利用Docker和Kubernetes构建微服务架构
|
23天前
|
Kubernetes 负载均衡 Docker
构建高效微服务架构:Docker与Kubernetes的完美搭档
本文介绍了Docker和Kubernetes在构建高效微服务架构中的应用,涵盖基本概念、在微服务架构中的作用及其实现方法。通过具体实例,如用户服务、商品服务和订单服务,展示了如何利用Docker和Kubernetes实现服务的打包、部署、扩展及管理,确保微服务架构的稳定性和可靠性。
75 7
|
19天前
|
Kubernetes 关系型数据库 MySQL
Kubernetes入门:搭建高可用微服务架构
【10月更文挑战第25天】在快速发展的云计算时代,微服务架构因其灵活性和可扩展性备受青睐。本文通过一个案例分析,展示了如何使用Kubernetes将传统Java Web应用迁移到Kubernetes平台并改造成微服务架构。通过定义Kubernetes服务、创建MySQL的Deployment/RC、改造Web应用以及部署Web应用,最终实现了高可用的微服务架构。Kubernetes不仅提供了服务发现和负载均衡的能力,还通过各种资源管理工具,提升了系统的可扩展性和容错性。
56 3
|
22天前
|
Kubernetes 负载均衡 Docker
构建高效微服务架构:Docker与Kubernetes的完美搭档
【10月更文挑战第22天】随着云计算和容器技术的快速发展,微服务架构逐渐成为现代企业级应用的首选架构。微服务架构将一个大型应用程序拆分为多个小型、独立的服务,每个服务负责完成一个特定的功能。这种架构具有灵活性、可扩展性和易于维护的特点。在构建微服务架构时,Docker和Kubernetes是两个不可或缺的工具,它们可以完美搭档,为微服务架构提供高效的支持。本文将从三个方面探讨Docker和Kubernetes在构建高效微服务架构中的应用:一是Docker和Kubernetes的基本概念;二是它们在微服务架构中的作用;三是通过实例讲解如何使用Docker和Kubernetes构建微服务架构。
55 6
|
1月前
|
Kubernetes Cloud Native 微服务
微服务实践之使用 kube-vip 搭建高可用 Kubernetes 集群
微服务实践之使用 kube-vip 搭建高可用 Kubernetes 集群
107 1
|
1月前
|
Kubernetes 负载均衡 应用服务中间件
k8s学习--ingress详细解释与应用(nginx ingress controller))
k8s学习--ingress详细解释与应用(nginx ingress controller))
169 0
|
2月前
|
Kubernetes 应用服务中间件 nginx
Kubernetes上安装Metallb和Ingress并部署应用程序
Kubernetes上安装Metallb和Ingress并部署nginx应用程序,使用LoadBalancer类型的KubernetesService
158 7
|
2月前
|
Kubernetes 负载均衡 前端开发
二进制部署Kubernetes 1.23.15版本高可用集群实战
使用二进制文件部署Kubernetes 1.23.15版本高可用集群的详细教程,涵盖了从环境准备到网络插件部署的完整流程。
100 2
二进制部署Kubernetes 1.23.15版本高可用集群实战
|
1月前
|
缓存 Kubernetes 负载均衡
在K8S中,ingress 有何作用?
在K8S中,ingress 有何作用?