Kubernetes教程
Kubernetes 基础
Kubernetes 简介
Kubernetes 架构与组件
Kubernetes 核心概念
Kubernetes 集群搭建与管理
Kubernetes集群管理
Kubernetes 集群搭建
Kubernetes 高级特性
Kubernetes 有状态应用编排
Kubernetes 无状态应用编排
Kubernetes 无状态应用编排
Kubernetes 作业与定时任务
Kubernetes 服务发现与负载均衡
Kubernetes 网络管理
Kubernetes存储管理
Kubernetes 安全性
Kubernetes 生产实践
Kubernetes 持续集成与持续部署(CI/CD)
Kubernetes 监控与日志管理
Kubernetes 高可用集群架构
Kubernetes 资源调度与优化
Kubernetes 扩展与定制
Kubernetes 自定义资源与控制器
Kubernetes的Operator 模式
Kubernetes 插件与扩展点
Kubernetes API 编程
-
+
首页
Kubernetes 服务发现与负载均衡
### Kubernetes 服务发现与负载均衡 #### Ingress **Ingress 的基本概念** - **定义**:Ingress 是 Kubernetes 中用于管理外部访问集群内部服务的 API 资源。它提供了 HTTP 和 HTTPS 路由规则,允许外部流量根据预设的规则被转发到不同的内部服务。 - **特点**: - **路由规则**:通过定义规则,可以实现基于路径(如 `/app1` -> `service1`,`/app2` -> `service2`)和基于域名(如 `app.example.com` -> `service1`)的路由。 - **支持 HTTPS/TLS**:Ingress 支持通过 TLS 为外部流量提供加密,确保数据传输的安全性。 - **负载均衡**:Ingress Controller 提供负载均衡功能,可以根据不同的算法(如轮询、IP 哈希等)将请求分发到不同的后端服务。 - **路径重写和转发**:支持路径重写和请求头的修改,增强路由的灵活性。 - **访问控制与身份验证**:支持基本的 HTTP 认证、OAuth2 等身份验证方式,增强安全性。 **使用 Nginx 控制器设置 Ingress** 1. **安装 Nginx Ingress Controller**: - **部署 Helm**: ```sh wget https://get.helm.sh/helm-v3.7.2-linux-amd64.tar.gz tar zxvf helm-v3.7.2-linux-amd64.tar.gz cp linux-amd64/helm /usr/local/bin/ ``` - **添加 Helm Chart**: ```sh helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx ``` - **部署 Nginx Ingress Controller**: ```sh helm install nginx-ingress ingress-nginx/ingress-nginx \ --namespace ingress-nginx \ --create-namespace \ --set controller.image.registry=willdockerhub \ --set controller.image.image=ingress-nginx-controller \ --set controller.image.tag=v1.0.0 \ --set controller.image.digest="" \ --set controller.hostNetwork=true \ --set controller.kind=DaemonSet \ --set controller.service.type=ClusterIP \ --set controller.hostPort.enable=true \ --set controller.admissionWebhooks.enabled=false \ --set controller.hostPort.http=80 \ --set controller.hostPort.https=443 \ --set controller.nodeSelector.node=ingress ``` - **查看 80、443 端口是否开放**: ```sh kubectl get pod -n ingress-nginx -o wide ss -anp | grep :443 ``` 2. **创建 Secret 绑定证书**: - **申请 SSL 证书**:可以使用 Let's Encrypt、阿里云等服务申请 SSL 证书。 - **创建 Secret**: ```sh kubectl create secret tls ingress-secret --key=6839102_test.k8sstudy.online.key --cert=6839102_test.k8sstudy.online.pem -n kube-system ``` 3. **创建测试服务**: - **准备 YAML 文件**: ```yaml apiVersion: apps/v1 kind: Deployment metadata: labels: app: helloworld-nodejs name: helloworld-nodejs namespace: kube-system spec: replicas: 1 selector: matchLabels: app: helloworld-nodejs template: metadata: labels: app: helloworld-nodejs spec: containers: - image: docker.io/xzxiaoshan/helloworld-nodejs:latest name: helloworld-nodejs ports: - containerPort: 8080 --- apiVersion: v1 kind: Service metadata: name: helloworld-nodejs namespace: kube-system spec: selector: app: helloworld-nodejs ports: - name: http port: 80 protocol: TCP targetPort: 8080 - name: https port: 443 protocol: TCP targetPort: 8080 ``` 4. **创建 Ingress**: - **准备 Ingress YAML 文件**: ```yaml apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: helloworld-ingress namespace: kube-system annotations: nginx.ingress.kubernetes.io/rewrite-target: /$1 spec: tls: - hosts: - helloworld.k8sstudy.online secretName: ingress-secret rules: - host: helloworld.k8sstudy.online http: paths: - path: /hello pathType: Prefix backend: service: name: helloworld-nodejs port: number: 80 ``` 5. **测试 HTTPS 访问**: - **访问服务**: ```sh curl https://helloworld.k8sstudy.online/hello ``` 通过以上步骤,你可以成功部署和管理一个支持 HTTPS 的 Ingress 服务。Nginx Ingress Controller 作为 Ingress 的实现,提供了强大的路由和负载均衡功能,确保外部流量可以安全、高效地访问集群内部的服务。
wwbang
2025年1月10日 18:18
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码