K3S 负载均衡和Ingress的应用

文章介绍了如何在k3s环境下实现负载均衡和Ingress功能。k3s通过在每个节点上部署endpointsvclb来提供负载均衡,以kubernetes-dashboard为例阐述了数据流流程。此外,k3s内置traefik作为Ingress控制器,创建Ingress资源以实现外部访问。通过一个nginx应用的部署和配置示例,验证了Ingress的功能。
摘要由CSDN通过智能技术生成

上回,我们介绍如何利用k3s 快速构建边缘云计算,IOT物联网云计算能力,这回,我们谈谈k3s的负载均衡和Ingress应用能力。我们知道,k8s中,如果要使用负载均衡,得需要第三方云厂商或自建负载均衡,在边缘云计算和IOT物联网环境,一般是不具备这个条件的。但是,K3S提供了负载均衡能力和Ingress能力,下面我们探讨下怎么实现。

1、k3s提供负载均衡能力,为每个服务在每个k3s Node节点上都部署endpoint svclb-*,他负责node流量转发。如下图所示:Pod: svclb-kubernetes-dashboard* 提供kubernetes-dashboard服务负载均衡接入,Pod: svclb-traefik-* 提供traefik服务负载均衡接入。

kubectl -n kube-system get pod
NAME                                        READY   STATUS      RESTARTS      AGE
helm-install-traefik-crd-4n4bg              0/1     Completed   0             16d
traefik-56b8c5fb5c-9kn9z                    1/1     Running     1 (14d ago)   16d
svclb-traefik-dd414390-jfngv                2/2     Running     2 (14d ago)   16d
coredns-59b4f5bbd5-hjn7n                    1/1     Running     1 (14d ago)   16d
local-path-provisioner-76d776f6f9-8b8s9     1/1     Running     2 (14d ago)   16d
metrics-server-7b67f64457-vfvkj             1/1     Running     2 (14d ago)   16d
helm-install-traefik-5ztnb                  0/1     Completed   0             42h
svclb-kubernetes-dashboard-783f186f-r9zvm   1/1     Running     0             17m

kubectl -n kube-system get svc

NAME    TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)              AGE
kube-dns ClusterIP  10.43.0.10      <none>   53/UDP,53/TCP,9153/TCP 16d
metrics-server ClusterIP 10.43.90.100    <none> 443/TCP             16d
traefik LoadBalancer   10.43.111.236   10.0.0.254  80:30058/TCP,443:30470/TCP 16d

kubectl -n kubernetes-dashboard get svc
NAME              TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
kubernetes-dashboard LoadBalancer 10.43.149.182 10.0.0.254    1443:32270/TCP   42h

现在以kubernetes-dashboard应用为例说明整个数据流流程。

当外部请求访问k3s的集群服务时:

首先,请求->node 的port: 1443, 然后,node 的iptables规则定义:转发1443流量到32270,32270就是kubernetes-dashboard服务入口,这样就实现外请求访问k3s服务功能。

iptables -t nat -L |grep 32270
KUBE-EXT-CEZPIJSAUFW5MYPQ  tcp  --  anywhere             anywhere             /* kubernetes-dashboard/kubernetes-dashboard */ tcp dpt:32270

在浏览器输入node IP:Port,就可实现通过负载均衡访问k3s内部服务啦!

2、k3s提供Ingress能力,默认情况下,k3s提供traefik ingress能力( 也可以采用nginx ingress)。

上面我们已经知道k3s会创建一个负载均衡:svclb-traefik,有了这个负载均衡器,同时,也提供Traefik ingress controller: traefik-*

kubectl -n kube-system get pod |grep traefik
helm-install-traefik-crd-4n4bg              0/1     Completed   0             16d
traefik-56b8c5fb5c-9kn9z                    1/1     Running     1 (14d ago)   16d
svclb-traefik-dd414390-jfngv                2/2     Running     2 (14d ago)   16d
helm-install-traefik-5ztnb                  0/1     Completed   0             42h

2) traefik dashbaord

kubectl -n kube-system port-forward deployment/traefik 9000:9000

3)、测试Ingress

编辑 nginx-deployment.yaml

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 2 # tells deployment to run 2 pods matching the template
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80

---
apiVersion: v1
kind: Service
metadata:
  name: nginx-svc
spec:
  ports:
    - port: 80
      name: nginx
      targetPort: 80
  type: ClusterIP
  selector:
    # apply service to any pod with label app: nginx
    app: nginx
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: nginx-ingress
  annotations:
    kubernetes.io/ingress.class: traefik
spec:
  rules:
    - host: nginx.h2lcloud.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: nginx-svc
                port:
                  number: 80

执行并检查状态

kubectl apply nginx-deployment.yaml

kubectl get pod,svc,ing

NAME                                    READY   STATUS    RESTARTS   AGE
pod/nginx-deployment-85996f8dbd-brf2l   1/1     Running   0          38h
pod/nginx-deployment-85996f8dbd-l2jsl   1/1     Running   0          38h

NAME                 TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
service/kubernetes   ClusterIP   10.43.0.1      <none>        443/TCP   16d
service/nginx-svc    ClusterIP   10.43.85.222   <none>        80/TCP    38h

NAME                                      CLASS     HOSTS                ADDRESS      PORTS   AGE
ingress.networking.k8s.io/nginx-ingress   traefik   nginx.h2lcloud.com   10.0.0.254   80      148m

4)、从浏览器检验访问

        恭喜您,您的k3s 已经具备负载均衡和Ingress功能,可以采用负载均衡和Ingress发布应用了!!!
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值