k8s 部署ingress

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-nginx
  labels:
    app: nginx
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    app: nginx
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
  type: 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-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  ingressClassName: nginx
  rules:
  - host: myapp.local
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: nginx-service
            port:
              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: nginx
  tls:
  - hosts:
    - myapp.local
    secretName: myapp-tls
  rules:
  - host: myapp.local
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: nginx-service
            port:
              number: 80

然后创建 myapp-tls 证书 Secret。


总结

  1. 安装 Ingress Controller(推荐使用 Helm)。
  2. 部署应用 Service,确保应用可以在 ClusterIP 访问。
  3. 创建 Ingress 规则,定义基于域名或路径的路由规则。
  4. 访问 Ingress 入口 IP,测试服务是否正常。
posted @ 2025-03-10 10:14  蒲公英PGY  阅读(570)  评论(0)    收藏  举报