k8s 部署ingress
在 Kubernetes (k8s) 中部署 Ingress 主要涉及以下步骤:
1. 确保集群环境
- 确保 Kubernetes 集群已安装并正常运行 (
kubectl get nodes
查看节点状态)。 - 确保有
kubectl
配置正确 (kubectl get pods -A
检查所有 Pod 状态)。 - 确保已安装 Ingress Controller(Nginx Ingress 是常用的选项)。
2. 安装 Ingress Controller
Kubernetes 默认的 Ingress 只是 API 对象,实际处理流量需要一个 Ingress Controller,比如 Nginx Ingress Controller。
方法 1:使用 Helm 安装 Nginx Ingress Controller
如果使用 Helm,可以通过以下命令安装:
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update
helm install my-ingress ingress-nginx/ingress-nginx -n ingress-nginx --create-namespace
检查 Ingress Controller 是否成功部署
kubectl get pods -n ingress-nginx
kubectl get svc -n ingress-nginx
- 你应该看到
ingress-nginx-controller
运行中,并且service/ingress-nginx-controller
可能有一个EXTERNAL-IP
。
方法 2:使用官方 YAML 部署
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/cloud/deploy.yaml
验证部署
kubectl get pods -n ingress-nginx
kubectl get svc -n ingress-nginx
如果 EXTERNAL-IP
显示 <pending>
,说明 Kubernetes 需要一个 LoadBalancer(裸机环境可用 Metallb)。
3. 部署应用 Service
先创建一个简单的 Nginx 应用,并暴露为 ClusterIP
类型的 Service:
apiVersion: apps/v1
kind: Deployment
metadata:name: my-nginxlabels:app: nginx
spec:replicas: 2selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:latestports:- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:name: nginx-service
spec:selector:app: nginxports:- protocol: TCPport: 80targetPort: 80type: ClusterIP
应用该 YAML 配置
kubectl apply -f nginx-deployment.yaml
验证 Service
kubectl get svc
应该能看到 nginx-service
运行中。
4. 创建 Ingress 规则
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: nginx-ingressannotations:nginx.ingress.kubernetes.io/rewrite-target: /
spec:ingressClassName: nginxrules:- host: myapp.localhttp:paths:- path: /pathType: Prefixbackend:service:name: nginx-serviceport:number: 80
应用 Ingress 规则
kubectl apply -f nginx-ingress.yaml
检查 Ingress
kubectl get ingress
应该会看到 ADDRESS
绑定的 Ingress 入口 IP。
5. 访问 Ingress
如果你的集群是 Minikube 或者裸机环境,可能需要手动修改 /etc/hosts
:
sudo echo "192.168.49.2 myapp.local" >> /etc/hosts
然后,在浏览器访问 http://myapp.local
,你应该能看到 Nginx 页面。
6. (可选) 配置 HTTPS (TLS 证书)
如果需要 HTTPS,可以使用 cert-manager
申请证书,或者手动创建 TLS 证书:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: nginx-ingress
spec:ingressClassName: nginxtls:- hosts:- myapp.localsecretName: myapp-tlsrules:- host: myapp.localhttp:paths:- path: /pathType: Prefixbackend:service:name: nginx-serviceport:number: 80
然后创建 myapp-tls
证书 Secret。
总结
- 安装 Ingress Controller(推荐使用 Helm)。
- 部署应用 Service,确保应用可以在
ClusterIP
访问。 - 创建 Ingress 规则,定义基于域名或路径的路由规则。
- 访问 Ingress 入口 IP,测试服务是否正常。