expose-via-kubelet-nodeport.md 3.5 KB

修改 Kubelet NodePort 地址范围暴露80,443端口

通过修改 Kubelet 配置,将 NodePort 的地址范围扩展至 1~32767,并将 Nginx Ingress Controller 的 Service NodePort 端口映射到 80 和 443。

步骤:

1. 修改 Kubelet 配置

在每个节点上,修改 Kubelet 启动参数,将 --service-node-port-range 参数设置为 1-32767

  • kubeadm 部署中,编辑 /var/lib/kubelet/config.yaml 文件:

     serviceNodePortRange: 1-32767
    
  • 或者在启动文件中添加:

    在多数系统中,Kubelet 的启动参数可以在 /etc/default/kubelet/etc/systemd/system/kubelet.service.d/10-kubeadm.conf 中找到。如果你使用的是 systemd 管理 Kubelet,请编辑 /etc/systemd/system/kubelet.service.d/10-kubeadm.conf 文件。

     KUBELET_EXTRA_ARGS="--service-node-port-range=1-32767"
    

2. 重启 Kubelet

重新启动 Kubelet 以使更改生效。

   sudo systemctl daemon-reload
   sudo systemctl restart kubelet

3. 部署 Nginx Ingress Controller

使用 Helm 安装 Nginx Ingress Controller,将其 Service NodePort 端口设置为 80 和 443。

为了确保客户端的真实 IP 地址能够在 NodePort 类型的服务中正确传递,你需要将 externalTrafficPolicy 设置为 Local。这将确保源地址转换(source IP preservation)在负载均衡到具体的节点上时得到应用。

helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
kubectl create namespace ingress-nginx
helm install ingress-nginx ingress-nginx/ingress-nginx --set controller.kind=DaemonSet --set controller.service.type=NodePort --set controller.service.nodePorts.http=80 --set controller.service.nodePorts.https=443 --set controller.service.externalTrafficPolicy=Local --set ingressClassResource.default=true --namespace ingress-nginx

4. 配置 Ingress Controller 以支持 Proxy Protocol

如果还有上游反向代理并开启了Proxy Protocol,可以配置 Nginx Ingress Controller 支持 Proxy Protocol,以便正确处理客户端的真实 IP 地址。

步骤 1:检查 Nginx Ingress Controller 配置

kubectl get configmap -n ingress-nginx ingress-nginx-controller -o yaml > nginx-configmap.yaml

步骤 2:确认 Proxy Protocol 配置

确保 ConfigMap 中包含 use-proxy-protocol: "true" 配置。如果没有,请创建或更新 ConfigMap:

apiVersion: v1
kind: ConfigMap
metadata:
  name: nginx-configuration
  namespace: ingress-nginx
data:
  use-proxy-protocol: "true"

应用更新的 ConfigMap:

kubectl apply -f nginx-configmap.yaml

步骤 3:重启 Nginx Ingress Controller

重新启动 Nginx Ingress Controller 以使配置更改生效:

kubectl rollout restart deployment ingress-nginx-controller -n ingress-nginx

5. DNS 配置

将域名的 DNS A 记录指向集群中任意一台节点的 IP 地址,或多个节点。

总结

通过以下步骤,你可以调整 NodePort 地址范围并配置 NodePort 服务的 externalTrafficPolicy

  • 修改 Kubelet 配置:调整 NodePort 地址范围为 1-32767
  • 配置 NodePort 服务:将 externalTrafficPolicy 设置为 Local,以确保源地址转换。
  • 配置 Ingress Controller:确保 Proxy Protocol 支持,以正确处理客户端 IP 地址。

这些步骤将确保你的 NodePort 服务能够正确处理客户端 IP 地址,并且符合你的网络配置要求。