You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

在Kubernetes Kubeadm集群中部署应用后,如何配置Ingress Nginx Controller?

用Ingress Nginx Controller暴露gmt-dpl应用的完整步骤

没问题,我来一步步帮你搞定这件事儿:

1. 先确认Ingress Nginx Controller已安装

首先得检查你的Kubernetes集群里有没有部署Ingress Nginx Controller,执行这条命令:

kubectl get pods -n ingress-nginx

如果返回结果是空,或者提示ingress-nginx命名空间不存在,说明还没安装。你可以用官方的静态部署清单来部署:

  1. 从Ingress Nginx官方维护的资源中,下载对应你Kubernetes版本的静态部署文件(注意选择匹配的controller版本)
  2. 将文件保存为ingress-nginx-deploy.yaml
  3. 执行安装命令:
kubectl apply -f ingress-nginx-deploy.yaml

等个3-5分钟,再执行开头的检查命令,看到所有pod的状态都是Running,就说明安装成功了。

2. 创建Ingress资源配置文件

接下来要写一个Ingress配置文件,用来把外部请求转发到你的gmt-svc服务上。比如创建一个名为gmt-ingress.yaml的文件,内容如下:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: gmt-ingress
  annotations:
    # 重点!告诉Ingress Controller后端应用用HTTP协议(如果你的应用是HTTPS就改成HTTPS)
    nginx.ingress.kubernetes.io/backend-protocol: "HTTP"
spec:
  rules:
  - host: gmt.example.com  # 这里可以换成你自己的域名,不想用域名的话可以删掉整行
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: gmt-svc  # 对应你之前创建的Service名称
            port:
              number: 443  # 对应Service的port字段(不是NodePort哦)

关键细节说明:

  • nginx.ingress.kubernetes.io/backend-protocol:这个注解绝对不能少!你的gmt-svc对外暴露的是443端口,但实际后端应用监听的是8181端口(HTTP服务),如果不加这个注解,Ingress Controller会默认用HTTPS去连接后端的8181端口,直接导致连接失败。
  • host:如果有自己的域名,就填上去;没有的话直接删掉整个host行,之后用Ingress Controller的IP就能访问。

3. 部署Ingress配置

执行这条命令把刚才的配置部署到集群里:

kubectl apply -f gmt-ingress.yaml

4. 验证Ingress是否生效

先查看Ingress的状态:

kubectl get ingress

正常情况下会看到类似这样的输出:

NAME          CLASS   HOSTS             ADDRESS        PORTS   AGE
gmt-ingress   nginx   gmt.example.com   192.168.56.10   80      2m
  • ADDRESS字段就是Ingress Controller的入口IP,你可以用这个IP直接访问(如果没填host的话)。

如果你的Ingress Controller是NodePort类型(Kubeadm集群没有LoadBalancer的话大概率是这样),还需要找一下它的NodePort端口:

kubectl get svc -n ingress-nginx

找到ingress-nginx-controller对应的NODEPORT列(比如是32100),然后用http://<集群任意节点IP>:32100就能访问你的应用了。要是填了host,记得在本地的hosts文件里把gmt.example.com映射到Ingress Controller的IP,之后直接用域名访问就行。

内容的提问来源于stack exchange,提问作者BOUKANDOURA Mhamed

火山引擎 最新活动