kubernetes Nexus Helm图表的配置:HTTPS服务HTTP资源

wpcxdonn  于 2023-02-03  发布在  Kubernetes
关注(0)|答案(2)|浏览(206)

我运行了以下命令:

kubectl create secret tls nexus-tls --cert cert.crt --key privateKey.pem

其中cert.crt包含我的证书,privateKey.pem包含我的私钥(使用CloudFlare配置)。
然后我安装了stable/sonatype-nexus Helm图表,配置如下:

nexusProxy:
  env:
    nexusDockerHost: containers.<<NEXUS_HOST>>
    nexusHttpHost: nexus.<<NEXUS_HOST>>

nexusBackup:
  enabled: true
  nexusAdminPassword: <<PASSWORD>>
  env:
    targetBucket: gs://<<BACKUP_BUCKET_NAME>>
  persistence:
    storageClass: standard

ingress:
  enabled: true
  path: /*
  annotations:
    kubernetes.io/ingress.allow-http: true
    kubernetes.io/tls-acme: true
    kubernetes.io/ingress.class: gce
    kubernetes.io/ingress.global-static-ip-name: <<STATIC_IP_ADDRESS_NAME>>
  tls:
    enabled: true
    secretName: nexus-tls

persistence:
  storageClass: standard
  storageSize: 1024Gi

resources:
  requests:
    cpu: 250m
    memory: 4800Mi

通过运行以下命令:

helm install -f values.yaml stable/sonatype-nexus

此处记录了此图表的可能配置值。
当我访问http://nexus.<<NEXUS_HOST>>时,我可以访问Nexus Repository。但是,当我访问https://nexus.<<NEXUS_HOST>>时,我收到混合内容警告,因为正在提供HTTP资源。
如果我将nexusProxy.env.enforceHttps环境变量设置为true,当我访问https://nexus.<<NEXUS_HOST>>时,我会得到如下所示的响应:

HTTP access is disabled. Click here to browse Nexus securely: https://nexus.<<NEXUS_HOST>>.

我如何确保Nexus得到安全的服务?我是否犯了配置错误,或者问题出在其他地方?

7qhs6swi

7qhs6swi1#

由于传统的原因,我必须在GKE上安装nexus,虽然这个问题没有直接说明它在Google Cloud上,但gs://ingress.class: gce表明它在Google Cloud上;尽管Xuan胡伊的回答更老,是关于AWS的。
我花了很长时间让Nexus TLS在GKE上工作,但我最终还是成功了。Google入口资源不是最稳定的。如果你在迭代,它们可能会楔入,您可能会发现终结器由于在L4 ILB清理中卡住而无法完成。事情变得如此糟糕,在GCP与只是无辜的部署和删除周期,我不得不垃圾项目,并开始新的测试,并最终得到一个有效的组合。
我的Helm values.yaml有以下内容。注意我也在使用Terraform,所以在运行Helm之前,我的${variables}被Terraform替换为我的特定环境设置。

service:
  type: ClusterIP
  annotations:
    cloud.google.com/neg: '{"ingress": true}'
    cloud.google.com/backend-config: '{"ports": {"8081":"sonatype-backendcfg"}}' 

ingress:
  ingressClassName: null      # on GCP, null this, and use annotations instead
  enabled: true
  hostPath: /                 # don't use /* that is suggested multiple places
  hostRepo: ${sonatype_dns_name}  # public facing FQDN
  annotations:
    ingress.gcp.kubernetes.io/pre-shared-cert: "${gce_ssl_cert_name}"
    kubernetes.io/ingress.class: "gce-internal"
    kubernetes.io/ingress.allow-http: "false"

    # unrelated hint - I use external-dns for DNS registration
    external-dns.alpha.kubernetes.io/hostname: "${sonatype_dns_name}."

  tls:
    - secretName: "${tls_secret_name}"
      hosts:
        - "${sonatype_cluster_dns_name}"  # the svc.cluster.local FQDN

在运行Helm之前,我的安装程序将TLS证书放在GCE证书存储中,以供ILB使用。
同样在Helm之前,${tls_secret_name} kubesecret是使用密钥名tls.crttls.key中的证书准备的(许多其他应用程序使用这种模式)。
我还有一个backendconfig资源:

apiVersion: cloud.google.com/v1                                                                                                                                 
kind: BackendConfig                                                                                                                                             
metadata:                                                                                                                                                       
  name: sonatype-backendcfg                                                                                                                                     
  namespace: sonatype                                                                                                                                           
spec:                                                                                                                                                           
  healthCheck:                                                                                                                                                  
    checkIntervalSec: 30                                                                                                                                        
    healthyThreshold: 1                                                                                                                                         
    port: 8081                                                                                                                                                  
    requestPath: /service/rest/v1/status                                                                                                                        
    timeoutSec: 15                                                                                                                                              
    type: HTTP                                                                                                                                                  
    unhealthyThreshold: 10

Nexus的人不支持这种情况太久,所以我们正在努力移动到港口,以便我们可以取消我们的Nexus许可证。

jtw3ybtb

jtw3ybtb2#

如果您的ELB正在提供纯http流量,请将此添加到您的LoadBalancer服务注解中。

service.beta.kubernetes.io/aws-load-balancer-backend-protocol: http

相关问题