Ingress

Ingress 是一种 Kubernetes 原生资源,用于提供从集群外部到集群内服务的 HTTP 和 HTTPS 路由。

创建 Ingress

下面是一个基本的 Ingress 示例:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-example
spec:
  rules:
  - host: foo.example.com
    http:
      paths:
      - path: /testpath
        pathType: Prefix
        backend:
          service:
            name: nginx-service
            port:
              number: 80
  tls:
  - hosts:
    - foo.example.com
    secretName: my-tls-secret

在该例中,当用户从集群外部访问地址 https://foo.example.com/testpath 时,Ingress 会将请求转发至名为 nginx-service 的 Service 的 80 端口。

为了支持 HTTPS 协议,该 Ingress 需要配置如下格式的 Secret:

apiVersion: v1
kind: Secret
metadata:
  name: my-tls-secret
data:
  tls.crt: <base64 encoded cert>
  tls.key: <base64 encoded key>
type: kubernetes.io/tls

使用 Ingress

创建 Ingress 后,还需要为 Ingress 定义中的域名配置 DNS 解析,才能支持用户正常访问。当 Ingress 控制器为 Ingress NGINX Controller 时,Ingress 定义中的域名需要解析到集群 ingress 节点的 IP 地址。

例如,可以通过以下命令得到集群 ingress 节点的 IP 地址为 100.1.2.3

$ kubectl get node -l node-role.kubernetes.io/ingress -o wide
NAME                 STATUS   ROLES     AGE    VERSION    INTERNAL-IP
ingress-node-name    Ready    ingress   536d   v1.28.6    100.1.2.3

那么,对于上节中的 Ingress 示例,应当配置域名 foo.example.com 解析到地址 100.1.2.3

下一步