跳到主要内容

(3)rancher等配置公网域名访问

需要访问的域名需要SSL证书,SSL证书可以在淘宝等N个地方进行购买。

如果需要的域名比较多,建议购买通配符域名证书。

rancher可以通过网址访问了,接下来主要是操作nginress-nginx,

先谈谈ingress有哪些暴漏模式

在 Kubernetes(K8S)中,Ingress 是一种用于将外部流量路由到集群内部服务的资源。Ingress 暴露模式主要有以下几种:

NodePort

  • 原理:在每个节点上打开一个特定端口,外部流量可以通过访问节点的 IP 地址和该端口来访问集群内的服务。Kubernetes 会自动将流量从该端口转发到对应的后端服务。

  • 特点

    • 优点:配置相对简单,不需要额外的负载均衡器即可实现外部访问,适用于简单的测试环境或小型集群。

    • 缺点:端口范围受限,默认在 30000-32767 之间,可能会与节点上其他应用的端口冲突。同时,每个节点都要暴露端口,安全性相对较低,且无法像负载均衡器那样提供高级的流量管理功能。

LoadBalancer

  • 原理:通常会利用云服务提供商(如 AWS、GCP、阿里云等)提供的负载均衡服务,为 Ingress 创建一个外部负载均衡器。负载均衡器会将外部流量分发到集群内的后端服务。

  • 特点

    • 优点:可以自动分配流量,实现高效的负载均衡,具备健康检查等功能,能自动将流量从不健康的后端节点上移开。还可以提供公网 IP,方便外部访问。

    • 缺点:依赖于云服务提供商的负载均衡服务,在私有云或本地环境中可能无法使用或需要额外的配置。使用云服务提供商的负载均衡器可能会产生额外的费用。

HostNetwork

  • 原理:允许 Pod 直接使用节点的网络命名空间,Pod 内的应用可以直接绑定到节点的 IP 地址和端口上,绕过了 Kubernetes 的网络代理和转发机制。

  • 特点

    • 优点:可以实现极低的网络延迟,因为没有额外的网络转发开销。对于一些对网络性能要求极高的应用,如高性能计算、实时通信等场景非常适用。

    • 缺点:由于 Pod 直接使用节点网络,可能会导致端口冲突问题。同时,安全性相对较低,Pod 可以直接访问节点网络,可能会对节点的网络安全造成威胁。

ClusterIP

  • 原理:为服务分配一个仅在集群内部可访问的虚拟 IP 地址,主要用于集群内部服务之间的通信。Ingress 可以通过 ClusterIP 将流量路由到后端的服务。

  • 特点

    • 优点:提供了一种在集群内部进行服务发现和通信的机制,使得服务之间可以通过 DNS 名称或 IP 地址进行通信,方便了微服务架构下的服务间调用。

    • 缺点:无法直接从集群外部访问,需要与其他暴露方式(如 NodePort、LoadBalancer 等)结合使用才能实现外部访问。

不同的暴露模式适用于不同的场景,在实际应用中,需要根据具体的业务需求、环境特点和性能要求等来选择合适的 Ingress 暴露模式。

总结:

NodePort直接面向service暴漏端口,不能通过域名访问

LoadBalancer需要借助云厂商提供的负载均衡能力,但是现在也有一些可以搭建

HostNetwork:绕过网络代理和转发,缺点pod阶段需要访问网络

本次使用了HostNetwork进行配置

ingress修改配置

在rancher中Deployments找到ingress-nginx-controller

增加配置

hostNetwork: true

然后ingress就会自动重新部署

然后再次打开就看到有了就说明成功了。

然后吧ingress-nginx的service修改为ClusterIP

然后接下来把rancher访问变成域名部署

首先需要绑定域名到master IP

对于rancher,先设置ingress

备注:

绑定端口为50,以及证书

然后把rancher的service修改为ClusterIP

配置https跳转http链接

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
namespace: your-namespace # 指定您的命名空间
annotations:
nginx.ingress.kubernetes.io/force-ssl-redirect: "true" # 强制 HTTPS 跳转
nginx.ingress.kubernetes.io/ssl-redirect: "true" # 启用 SSL 重定向
spec:
tls:
- hosts:
- example.com # 替换为您的域名
secretName: my-tls-secret # 使用的 TLS Secret
rules:
- host: example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: example-service # 替换为您的服务名称
port:
number: 80 # 目标服务的 HTTP 端口