You need to enable JavaScript to run this app.
导航
通过 kubectl 创建 Nginx Ingress
最近更新时间:2024.06.05 20:37:49首次发布时间:2023.12.20 16:51:51
复制全文
我的收藏
有用
有用
无用
无用

容器服务提供基于社区版的 Nginx Ingress Controller,它将 Ingress 规则转换成 Nginx 的配置,并基于 Nginx 来进行七层的流量转发。本文为您介绍如何通过 YAML 配置 Nginx Ingress。

前提条件

创建 Nginx Ingress

基于域名转发

Nginx Ingress 支持将不同的域名访问,转发到不同的后端。

  1. 创建 Ingress 的 YAML 文件,示例nginx-ingress.yaml代码如下:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: nginx-ingress # 路由规则的名称
  namespace: default  # 路由规则所属的命名空间
spec:
  ingressClassName: nginx # 指定 Ingress Controller
  rules:
    - host: first.example.com  # 需要对外提供访问的域名
      http:
        paths:
        - pathType: Prefix # 路径匹配规则,默认为 Prefix(前缀匹配)
          path: / # 请求匹配的路径
          backend:
            service:
              name: service-demo-a # 需要对接的服务名称
              port: 
                number: 80 # 需要对接服务的端口号
    - host: second.example.com  # 需要对外提供访问的域名
      http:
        paths:
        - pathType: Prefix # 路径匹配规则。取值:Exact(精确匹配)、Prefix(前缀匹配)
          path: / # 请求匹配的路径
          backend:
            service:
              name: service-demo-b # 需要对接的服务名称
              port: 
                number: 80 # 需要对接服务的端口号
  1. 执行以下命令,创建 Ingress。
kubectl apply -f nginx-ingress.yaml

基于路径转发

Nginx Ingress 支持将相同域名、不同路径的访问,转发到不同的后端。

  1. 创建 Ingress 的 YAML 文件,示例nginx-ingress.yaml代码如下:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: nginx-ingress # 路由规则的名称
  namespace: default  # 路由规则所属的命名空间
spec:
  ingressClassName: nginx # 指定 Ingress Controller
  rules:
    - host: example.com  # 需要对外提供访问的域名
      http:
        paths:
        - path: /foo # 请求匹配的路径
          pathType: Prefix # 路径匹配规则,默认为 Prefix(前缀匹配)
          backend:
            service:
              name: service-demo-a # 需要对接的服务名称
              port: 
                number: 80 # 需要对接服务的端口号
        - path: /bar # 请求匹配的路径
          pathType: Prefix # 路径匹配规则,默认为 Prefix(前缀匹配)
          backend:
            service:
              name: service-demo-b # 需要对接的服务名称
              port: 
                number: 80 # 需要对接服务的端口号
  1. 执行以下命令,创建 Ingress。
kubectl apply -f nginx-ingress.yaml

使用自定义 Nginx Ingress Controller

容器服务支持在集群中同时部署多套独立的 Nginx Ingress Controller 服务,详情请参见 部署多套 Nginx Ingress Controller

您可以基于实际业务需求或场景,使用不同的 Nginx Ingress Controller 对外提供不同的服务访问。配置步骤如下:

  1. 创建 Ingress 的 YAML 文件,示例nginx-ingress.yaml代码如下。其中,在spec.ingressClassName字段中使用名称指定 Nginx Ingress Controller 服务。本例中以user-ingress-nginx为例。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-demo # ingress 的名称
  namespace: default # ingress 所在的命名空间
spec:
  ingressClassName: user-ingress-nginx # 自定义的 Nginx Ingress Controller 名称
  rules:
  - host: example.com # 外部访问的域名
    http:
      paths:
      - pathType: Prefix
        path: /
        backend:
          service:
            name: service-demo # ingress 后端对接的服务名称
            port:
              number: 80 # ingress 对接服务的端口号
  1. 执行以下命令,创建应用和服务。
kubectl apply -f nginx-ingress.yaml

结果验证

查看配置

  1. 执行以下命令,查看 ingress 配置。
kubectl get ingress

预期返回结果如下,表示 Ingress 创建成功。其中180.xxx.xxx.xxx为 Nginx Ingress 对应 CLB 的公网或私网 IP 地址。

NAME            CLASS   HOSTS          ADDRESS          PORTS   AGE
nginx-ingress   nginx   example.com    180.xxx.xxx.xxx   80     74s

访问服务

使用以下命令,通过域名访问服务。

curl -H "Host: example.com" http://180.xxx.xxx.xxx

预期输出如下,表示可以通过域名访问到后端服务。

<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>