Harbor高可用集群网络配置:GitHub_Trending/ha/harbor-helm DNS与Ingress控制器

Harbor高可用集群网络配置:GitHub_Trending/ha/harbor-helm DNS与Ingress控制器

【免费下载链接】harbor-helm The helm chart to deploy Harbor 【免费下载链接】harbor-helm 项目地址: https://gitcode.com/GitHub_Trending/ha/harbor-helm

在Kubernetes环境中部署Harbor高可用集群时,网络配置是确保服务稳定性的核心环节。本文将聚焦于GitHub_Trending/ha/harbor-helm项目中的DNS解析与Ingress控制器配置,通过实战案例帮助运维人员快速掌握高可用网络架构的关键要点。

高可用网络架构概览

Harbor高可用集群的网络层需要实现三个核心目标:服务暴露、流量分发和故障隔离。根据官方高可用文档,Kubernetes环境下的网络架构采用"Ingress控制器+Service网格"的双层模型,配合DNS服务发现实现跨节点流量调度。

Harbor高可用网络架构

核心网络组件

  • Ingress控制器:作为集群入口,负责HTTP/HTTPS流量路由(支持Nginx、GCE等多种实现)
  • Service资源:Kubernetes内部服务发现机制,提供固定访问点
  • DNS服务:通过CoreDNS实现服务名到ClusterIP的解析
  • 内部TLS:可选配置,加密组件间通信(默认禁用)

DNS配置实战

Harbor集群的DNS配置通过Helm模板中的服务命名规则实现标准化。在templates/_helpers.tpl中定义了统一的服务命名函数,确保所有组件遵循release-name-component的命名规范。

服务命名规则

# 服务命名模板示例(来自templates/_helpers.tpl)
{{- define "harbor.core" -}}
  {{- printf "%s-core" (include "harbor.fullname" .) -}}
{{- end -}}

{{- define "harbor.portal" -}}
  {{- printf "%s-portal" (include "harbor.fullname" .) -}}
{{- end -}}

内部DNS解析配置

  1. 服务发现:所有组件通过Service名称相互访问,如Core服务通过{{ template "harbor.core" . }}获取访问地址
  2. 外部URL配置:在values.yaml中设置externalURL参数,作为集群对外暴露的统一入口:
    externalURL: https://core.harbor.domain  # 需与Ingress主机名保持一致
    
  3. 无代理配置:通过noProxy参数排除内部服务域名,避免流量被代理拦截:
    noProxy: 127.0.0.1,localhost,.local,.internal,{{ template "harbor.core" . }},{{ template "harbor.portal" . }}
    

Ingress控制器配置

Ingress控制器是Harbor集群的流量入口,templates/ingress/ingress.yaml提供了可适配多种控制器的配置模板,支持Kubernetes 1.14+版本的API规范。

多版本API兼容

模板通过条件判断自动适配不同Kubernetes版本的Ingress API:

# API版本自动选择(来自templates/ingress/ingress.yaml)
{{- if semverCompare "<1.14-0" (include "harbor.ingress.kubeVersion" .) }}
apiVersion: extensions/v1beta1
{{- else if semverCompare "<1.19-0" (include "harbor.ingress.kubeVersion" .) }}
apiVersion: networking.k8s.io/v1beta1
{{- else }}
apiVersion: networking.k8s.io/v1
{{- end }}

路径路由规则

根据控制器类型自动生成不同的路径匹配策略,默认配置如下:

路径后端服务说明
/portalWeb控制台
/api/coreAPI接口
/service/core内部服务通信
/v2/coreDocker Registry v2 API
/c/coreChart仓库

控制器类型适配

支持多种Ingress控制器,通过expose.ingress.controller参数指定:

# values.yaml中的控制器配置
expose:
  ingress:
    controller: default  # 可选:default/gce/ncp/alb/f5-bigip
    annotations:
      ingress.kubernetes.io/ssl-redirect: "true"
      nginx.ingress.kubernetes.io/proxy-body-size: "0"  # 允许大文件上传

Gateway API配置(可选)

对于Kubernetes 1.19+环境,项目提供了Gateway API( networking.k8s.io/v1)的支持,通过templates/gateway-apis/route.yaml实现更细粒度的流量控制。

HTTPRoute配置示例

# Gateway API路由规则(来自templates/gateway-apis/route.yaml)
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
spec:
  parentRefs:
    - name: envoy-internal  # 引用现有Gateway资源
      namespace: networking
  hostnames:
    - "harbor.example.com"
  rules:
    - matches:
        - path:
            type: PathPrefix
            value: /api/
      backendRefs:
        - name: {{ template "harbor.core" . }}
          port: {{ template "harbor.core.servicePort" . }}

高可用配置最佳实践

多可用区部署

通过拓扑分布约束实现Ingress控制器跨节点部署:

# values.yaml中的拓扑分布配置
nginx:
  topologySpreadConstraints:
    - maxSkew: 1
      topologyKey: topology.kubernetes.io/zone
      whenUnsatisfiable: DoNotSchedule

会话亲和性配置

对于需要保持会话的场景,可通过Ingress注解启用会话亲和:

# Ingress会话亲和配置
annotations:
  nginx.ingress.kubernetes.io/affinity: "cookie"
  nginx.ingress.kubernetes.io/session-cookie-name: "harbor-session"
  nginx.ingress.kubernetes.io/session-cookie-expires: "172800"

性能优化参数

  1. 连接超时设置

    nginx.ingress.kubernetes.io/proxy-connect-timeout: "30"
    nginx.ingress.kubernetes.io/proxy-read-timeout: "1800"
    
  2. SSL优化

    nginx.ingress.kubernetes.io/ssl-protocols: "TLSv1.2 TLSv1.3"
    nginx.ingress.kubernetes.io/ssl-ciphers: "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256"
    

验证与测试

网络连通性测试

部署完成后,通过以下命令验证Ingress规则是否生效:

# 查看Ingress资源
kubectl get ingress -n harbor
# 测试API连通性
curl -k https://core.harbor.domain/api/v2.0/ping

故障转移测试

  1. 节点故障模拟

    kubectl drain node-1 --ignore-daemonsets --delete-emptydir-data
    
  2. 流量切换验证

    watch kubectl get pods -n harbor -o wide  # 观察Pod重新调度
    

总结与展望

Harbor高可用集群的网络配置是一个系统性工程,需要Ingress控制器、DNS服务和Service资源的协同工作。通过合理配置templates/ingress/ingress.yamlvalues.yaml中的参数,可实现跨节点、跨可用区的流量调度。未来版本将进一步优化Gateway API支持,提供更灵活的流量管理能力。

建议收藏本文以便后续配置参考,下期将推出《Harbor高可用存储方案:PVC与对象存储实战》,深入探讨数据持久化策略。

【免费下载链接】harbor-helm The helm chart to deploy Harbor 【免费下载链接】harbor-helm 项目地址: https://gitcode.com/GitHub_Trending/ha/harbor-helm

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值