Linux Kubernetes Service 之 Ingress

本文详细介绍了Kubernetes的Ingress服务,包括其概念、部署、添加域名访问、DaemonSet部署、Nginx控制器的加密和认证部署,以及重写部署的多种场景。通过实例展示了如何设置Ingress以实现不同服务的负载均衡、域名访问、TLS加密和基础认证。
摘要由CSDN通过智能技术生成

官方文档:https://kubernetes.io/zh/docs/concepts/services-networking/ingress/

一、Ingress介绍

一种全局的、为了代理不同后端 Service 而设置的负载均衡服务,就是 Kubernetes 里的Ingress 服务。

Ingress由两部分组成:Ingress controller和Ingress服务。

Ingress Controller 会根据你定义的 Ingress 对象,提供对应的代理能力。业界常用的各种反向代理项目,比如 Nginx、HAProxy、Envoy、Traefik 等,都已经为Kubernetes 专门维护了对应的 Ingress Controller。以下选择nginx进行演示。

在这里插入图片描述

二、Ingress的部署

下载ingress controller定义文件:

[root@server1 ~]# wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.30.0/deploy/static/mandatory.yaml		#可能需要多拉取几次才会成功

 
 
 
  • 1

应用定义文件后到pod运行可能需要等几分钟来拉取镜像(300多M),我们可以先在其他节点上拉取所需要的镜像:
首先查看定义文件确定所需镜像:

[root@server1 ~]# vim mandatory.yaml 

 
 
 
  • 1

在这里插入图片描述
当然如果你有私有仓库也可以先将这个镜像拉取下来然后放更改文件种的镜像名称从私有仓库拉取。
在各节点拉取镜像:

[root@server2 ~]# docker pull quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.30.0

 
 
 
  • 1
[root@server3 ~]# docker pull quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.30.0

 
 
 
  • 1

应用ingress controller定义文件:

[root@server1 ~]# kubectl apply -f mandatory.yaml
namespace/ingress-nginx created

 
 
 
  • 1
  • 2

应用后会创建一个名为ingress-nginx 的namespace:

在这里插入图片描述

等待一下查看pod状态:

[root@server1 ~]# kubectl -n ingress-nginx get pod
NAME                                        READY   STATUS    RESTARTS   AGE
nginx-ingress-controller-5bb8fb4bb6-j26w5   1/1     Running   0          13s

 
 
 
  • 1
  • 2
  • 3

可以看出ingress-controller已经正常运行,接下来运行ingress-service:

下载定义文件:
[root@server1 ~]# wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.30.0/deploy/static/provider/baremetal/service-nodeport.yaml
应用定义文件:
[root@server1 ~]# kubectl apply -f service-nodeport.yaml 
service/ingress-nginx created

 
 
 
  • 1
  • 2
  • 3
  • 4
  • 5

应用后查看svc状态:

[root@server1 ~]# kubectl -n ingress-nginx get svc
NAME            TYPE       CLUSTER-IP       EXTERNAL-IP   PORT(S)                      AGE
ingress-nginx   NodePort   10.109.140.206   <none>        80:31899/TCP,443:32456/TCP   3s

 
 
 
  • 1
  • 2
  • 3

可以看出这个service的方式时NodePort,因此在访问在这个服务的时候需要加端口31899.

接下来进行实验的准备,创建一个myservice服务:

创建一个名为myservice的服务使用默认方式ClusterIP:

[root@server1 ~]# vim service.yaml 
[root@server1 ~]# cat service.yaml 
apiVersion: v1
kind: Service
metadata:
  name: myservice
spec:
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
  selector:
    app: nginx
  type: ClusterIP
[root@server1 ~]# kubectl apply -f service.yaml 
service/myservice created

 
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

之后创建ingress服务并将myservice添加为后端服务:

[root@server1 ~]# vim ingresss.yaml 
[root@server1 ~]# cat ingresss.yaml 
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: ingress-demo
spec:
  backend:
    serviceName: myservice				#这个表示要调度的后端service的名称
    servicePort: 80						#myservice的端口
[root@server1 ~]# kubectl apply -f ingresss.yaml 
ingress.networking.k8s.io/ingress-demo created

 
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

现在基本的ingress集群已经部署成功,可以使用以下命令查看ingress服务:

[root@server1 ~]# kubectl get ingress
NAME           CLASS    HOSTS   ADDRESS   PORTS   AGE
ingress-demo   <none>   *                 80      17s

 
 
 
  • 1
  • 2
  • 3

在这里插入图片描述在这里插入图片描述之后测试访问:

[root@foundation63 Desktop]# curl 172.25.63.3:31899
Hello MyApp | Version: v2 | <a href="hostname.html">Pod Name</a>
[root@foundation63 Desktop]# curl 172.25.63.3:31899
Hello MyApp | Version: v2 | <a href="hostname.html">Pod Name</a>

 
 
 
  • 1
  • 2
  • 3
  • 4

访问成功。

三、添加域名访问ingress

单域名单服务

更改ingresss.yaml文件:

[root@server1 ~]# vim ingresss.yaml 
[root@server1 ~]# cat ingresss.yaml 
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: ingress-demo
spec:
  backend:
    serviceName: myservice
    servicePort: 80
  rules:
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值