全国服务热线:18271592020
资讯

关于长亭空间

超值服务提供卓越产品

   
  
  
新闻公告 News
   
Kubernetes Ingress:灵活的集群外部网络访问的利器
来源: | 作者:chang | 发布时间: 2023-11-08 | 102 | 分享到:

前提条件

  • 您已经拥有一个 Kubernetes 集群,并且可以访问该集群。
  • 您已经安装了 kubectl 命令行工具。

版本选择

安装前需要选择兼容你Kubernetes的版本,不能会失败。

ingress由两部分组成:

  • Ingress Controller:负责处理 Ingress 请求,并将请求转发到正确的服务。
  • Ingress 资源对象:定义 Ingress 规则,包括路由规则、负载均衡、SSL/TLS 保护等。

以下就是具体的安装步骤:

安装 Ingress Controller

Ingress Controller 是负责处理 Ingress 请求的组件。Kubernetes 提供了多种 Ingress Controller,您可以根据需要选择。以下是常用的 Ingress Controller:

  • Nginx Ingress Controller:基于 Nginx 的 Ingress Controller,功能强大,易于配置。
  • HAProxy Ingress Controller:基于 HAProxy 的 Ingress Controller,性能优异,适用于高并发场景。
  • Contour Ingress Controller:基于 Envoy 的 Ingress Controller,功能丰富,适用于多云场景。

在本教程中,我们将使用 Nginx Ingress Controller 进行演示。

复制
wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.4.0/deploy/static/provider/cloud/deploy.yaml
				
  • 1.

一定要把版本后面带的@摘要值删除掉。

要创建 Ingress 资源对象,您可以使用 kubectl 命令:

复制
kubectl apply -f deploy.yaml
#安装后查看安装结果
kubectl  get pods  -n ingress-nginx
				
  • 1.
  • 2.
  • 3.

看到下图的结果就代表成功了,只要controller是Running,其它是Completed就可以了。

如果发现安装失败,可以尝试删除pod再重新kubectl apply -f deploy.yaml。

复制
#强制删除pod
kubectl delete pod --all -n ingress-nginx --force --grace-period=0
kubectl apply -f deploy.yaml
				
  • 1.
  • 2.
  • 3.

如果想查看具体的失败原因,可以使用下面的命令。

复制
kubectl  get pods  -n ingress-nginx
kubectl describe pod ingress-nginx-controller-6c978d4999-vqfwp --namespace ingress-nginx
				
  • 1.
  • 2.

发部署应用

vim nginx-deploy.yaml:

复制
apiVersion: apps/v1
kind: Deployment metadata: labels: app: nginx-demo
  name: nginx-demo
spec: replicas: 2 selector: matchLabels: app: nginx
  template: metadata: labels: app: nginx
    spec: containers: - image: nginx
        name: nginx --- apiVersion: v1
kind: Service metadata: labels: app: nginx
  name: nginx
spec: selector: app: nginx
  ports: - port: 8000 protocol: TCP
    targetPort: 80
				
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
复制
kubecl apply -f nginx-deploy.yaml

kubectl get pod,svc
				
  • 1.
  • 2.
  • 3.

Ingress资源对象

vim ingress-nginx.yaml:

复制
apiVersion: networking.k8s.io/v1
kind: Ingress  
metadata:
  name: ingress-nginx
spec:
  ingressClassName: nginx
  rules:
  - host: "demo.com"
    http:
      paths:
      - pathType: Prefix
        path: "/"
        backend:
          service:
            name: nginx
            port:
              number: 8000
				
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.

没有域名可以自己在/etc/hosts 增加demo.com:

复制
kubecl apply -f ingress-nginx.yaml

kubectl get ing
				
  • 1.
  • 2.
  • 3.

查看端口:

复制
kubectl  get pods,svc  -n ingress-nginx
				
  • 1.

总结

一般安装都会失败,主要是国内无法下载镜像。可以看到个deploy.yaml中要下载两个镜像文件分别是:

  • registry.k8s.io/ingress-nginx/controller:v1.4.0。
  • registry.k8s.io/ingress-nginx/kube-webhook-certgen:v20220916-gd32f8c343。

有几种解决方案:

  • 改成国内镜像源,一般旧怎么的还是比较多的,新版本还是比较少。
  • 安装个代理,然后下载。
  • 手动下载镜像tar,再docker load进本地镜像库里。使用tag修改镜像tag:
复制
docker tag old_image_name new_image_name