配置 Ingress

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

创建一个 Ingress,用于管理对某个 Service 的外部 HTTP/HTTPS 访问。

WARNING

在同一 namespace 中创建多个 ingress 时,不同的 ingress MUST NOT 具有相同的 DomainProtocolPath(即,不允许重复的访问点)。

实现方式

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 Class不同的 controller 可以通过不同的 IngressClass 名称来实现 Ingress。如果平台上有多个 ingress controller,可通过此选项选择要使用的 controller。
    Domain Name主机名可以是精确匹配(例如 foo.bar.com),也可以是通配符(例如 *.foo.com)。可用的域名由平台管理员分配。
    Certificates由平台管理员分配的 TLS secret 或 Certificates。
    Match TypePath
    • Prefix:匹配路径前缀,例如 /abcd 可以匹配 /abcd/efg/abcde
    • Exact:匹配精确路径,例如 /abcd
    • Implementation specific:如果你使用自定义 Ingress controller 来管理 Ingress 规则,可以由 controller 自行决定。
    Service外部流量将转发到该 Service。
    Service Port指定将流量转发到哪个 Service 端口。
  5. 点击 Create

使用 CLI 创建 Ingress

kubectl apply -f nginx-ingress.yaml