创建 Ingress

Ingress 规则(Kubernetes Ingress)将集群外部的 HTTP/HTTPS 路由暴露到内部路由(Kubernetes Service),从而实现对计算组件的外部访问控制。

创建一个 Ingress 来管理对 Service 的外部 HTTP/HTTPS 访问。

WARNING

在同一命名空间内创建多个 ingress 时,不同的 ingress 不得 具有相同的 域名协议路径(即不允许重复的访问入口)。

目录

实现方式

Ingress 规则依赖于 Ingress Controller 的实现,Ingress Controller 负责监听 Ingress 和 Service 的变化。当创建新的 Ingress 后,Ingress Controller 收到请求时,会根据 Ingress 中的转发规则匹配,并将流量分发到指定的内部路由,如下图所示。

NOTE

对于 HTTP 协议,Ingress 仅支持 80 端口作为外部端口。对于 HTTPS 协议,Ingress 仅支持 443 端口作为外部端口。平台的负载均衡器会自动添加 80 和 443 监听端口。

Ingress 示例:

# nginx-ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: nginx-ingress
  namespace: k-1
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  ingressClassName: nginx
  rules:
    - host: demo.local
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: nginx-service
                port:
                  number: 80
  1. 更多配置请参考 nginx-configuration
  2. nginx 表示使用 ingress-nginx controller,$alb_name 表示使用 alb 作为 ingress controller。
  3. 如果只想在本地运行 ingress,请提前配置 hosts

通过 Web 控制台创建 Ingress

  1. 访问 Container Platform

  2. 在左侧导航栏点击 Network > Ingress

  3. 点击 Create Ingress

  4. 参考以下说明配置相关参数。

    参数说明
    Ingress ClassIngress 可以由不同的 controller 实现,具有不同的 IngressClass 名称。如果平台上存在多个 ingress controller,用户可以通过此选项选择使用哪一个。
    域名Host 可以是精确匹配(例如 foo.bar.com)或通配符(例如 *.foo.com)。可用的域名由平台管理员分配。
    证书TLS secret 或由平台管理员分配的证书。
    匹配类型路径
    • Prefix:匹配路径前缀,例如 /abcd 可以匹配 /abcd/efg/abcde
    • Exact:匹配精确路径,例如 /abcd
    • 实现特定:如果使用自定义 Ingress controller 管理 Ingress 规则,可以选择由 controller 决定。
    Service外部流量将转发到该 Service。
    Service 端口指定流量将转发到 Service 的哪个端口。
  5. 点击 Create

通过 CLI 创建 Ingress

kubectl apply -f nginx-ingress.yaml