前提条件
- 您已经拥有一个 Kubernetes 集群,并且可以访问该集群。
- 您已经安装了 kubectl 命令行工具。
版本选择
安装前需要选择兼容你Kubernetes的版本,不能会失败。
ingress由两部分组成:
- Ingress Controller:负责处理 Ingress 请求,并将请求转发到正确的服务。
- Ingress 资源对象:定义 Ingress 规则,包括路由规则、负载均衡、SSL/TLS 保护等。
以下就是具体的安装步骤:
安装 Ingress Controller
Ingress Controller 是负责处理 Ingress 请求的组件。Kubernetes 提供了多种 Ingress Controller,您可以根据需要选择。以下是常用的 Ingress Controller:
- Nginx Ingress Controller:基于 Nginx 的 Ingress Controller,功能强大,易于配置。
- HAProxy Ingress Controller:基于 HAProxy 的 Ingress Controller,性能优异,适用于高并发场景。
- Contour Ingress Controller:基于 Envoy 的 Ingress Controller,功能丰富,适用于多云场景。
在本教程中,我们将使用 Nginx Ingress Controller 进行演示。
wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.4.0/deploy/static/provider/cloud/deploy.yaml
一定要把版本后面带的@摘要值删除掉。
要创建 Ingress 资源对象,您可以使用 kubectl 命令:
kubectl apply -f deploy.yaml
#安装后查看安装结果
kubectl get pods -n ingress-nginx
看到下图的结果就代表成功了,只要controller是Running,其它是Completed就可以了。
如果发现安装失败,可以尝试删除pod再重新kubectl apply -f deploy.yaml。
#强制删除pod
kubectl delete pod --all -n ingress-nginx --force --grace-period=0
kubectl apply -f deploy.yaml
如果想查看具体的失败原因,可以使用下面的命令。
kubectl get pods -n ingress-nginx
kubectl describe pod ingress-nginx-controller-6c978d4999-vqfwp --namespace ingress-nginx
发部署应用
vim nginx-deploy.yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: nginx-demo
name: nginx-demo
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- image: nginx
name: nginx
---
apiVersion: v1
kind: Service
metadata:
labels:
app: nginx
name: nginx
spec:
selector:
app: nginx
ports:
- port: 8000
protocol: TCP
targetPort: 80
kubecl apply -f nginx-deploy.yaml
kubectl get pod,svc
Ingress资源对象
vim ingress-nginx.yaml:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-nginx
spec:
ingressClassName: nginx
rules:
- host: "demo.com"
http:
paths:
- pathType: Prefix
path: "/"
backend:
service:
name: nginx
port:
number: 8000
没有域名可以自己在/etc/hosts 增加demo.com:
kubecl apply -f ingress-nginx.yaml
kubectl get ing
查看端口:
kubectl get pods,svc -n ingress-nginx
总结
一般安装都会失败,主要是国内无法下载镜像。可以看到第一个deploy.yaml中要下载两个镜像文件分别是:
- registry.k8s.io/ingress-nginx/controller:v1.4.0。
- registry.k8s.io/ingress-nginx/kube-webhook-certgen:v20220916-gd32f8c343。
有几种解决方案:
- 改成国内镜像源,一般旧怎么的还是比较多的,新版本还是比较少。
- 安装个代理,然后下载。
- 手动下载镜像tar,再docker load进本地镜像库里。使用tag修改镜像tag:
docker tag old_image_name new_image_name