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头。