Ingress 安装和配置

Ingress是一种Kubernetes资源,用于定义从集群外部访问集群内部服务的规则。而Ingress控制器则是负责实现这些规则的组件。在Kubernetes(k8s)中,入口控制器和入口资源通常指的是Ingress控制器和Ingress资源。

安装 Ingress 控制器

在Kubernetes中,有许多不同的Ingress控制器可供选择,如NGINX Ingress Controller、Traefik、HAProxy等。你需要选择并安装一个Ingress控制器。下面以NGINX Ingress Controller为例,示范安装步骤:

# 添加 NGINX Ingress Controller 仓库
kubectl apply -f https://github.jobcher.com/gh/https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/cloud/deploy.yaml

创建 Ingress 资源

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-ingress
spec:
  rules:
  - host: myapp.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: myapp-service
            port:
              number: 80

上述示例定义了一个Ingress规则,将myapp.example.com的请求路由到名为myapp-service的Service的80端口。

部署服务

确保你的服务已经部署在Kubernetes集群中,并且有一个Service暴露在网络上,Ingress将通过该Service将流量路由到应用程序。
将Ingress资源应用到Kubernetes集群:

kubectl apply -f your-ingress-file.yaml

验证

验证Ingress是否生效。你可以通过访问定义的域名(在示例中是myapp.example.com)来测试服务是否可用。

更多配置

请注意,这只是一个简单的示例,实际情况中可能需要根据需要配置更多的Ingress规则,如TLS证书、路径重定向等。

添加 TLS 证书

如果你想通过HTTPS保护你的应用程序,你可以在Ingress规则中添加TLS配置。首先,需要为你的域名获取TLS证书,然后将证书添加到Ingress规则中。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-ingress
  annotations:
    nginx.ingress.kubernetes.io/ssl-redirect: "true" # 强制使用HTTPS
spec:
  tls:
  - hosts:
    - myapp.example.com
    secretName: my-tls-secret # 在Secret中存储TLS证书
  rules:
  - host: myapp.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: myapp-service
            port:
              number: 80

路径重定向

你可以使用Ingress规则进行路径重定向,将请求从一个路径重定向到另一个路径。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-ingress
spec:
  rules:
  - host: myapp.example.com
    http:
      paths:
      - path: /old-path
        pathType: Prefix
        backend:
          service:
            name: myapp-service
            port:
              number: 80
  - host: myapp.example.com
    http:
      paths:
      - path: /new-path
        pathType: Prefix
        backend:
          service:
            name: myapp-service
            port:
              number: 80

上述规则将/old-path上的请求重定向到/new-path。

自定义 NGINX 配置

对于NGINX Ingress Controller,你还可以通过在Ingress规则中添加注释来自定义NGINX配置。例如,你可以添加自定义的NGINX配置块:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-ingress
  annotations:
    nginx.ingress.kubernetes.io/server-snippet: |
      location / {
        proxy_set_header X-My-Header "my-value";
      }
spec:
  rules:
  - host: myapp.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: myapp-service
            port:
              number: 80

上述规则将在NGINX配置中添加一个location块,设置X-My-Header头。

Last Updated:
Contributors: jobcher