Configure SMTP for SonarQube on Kubernetes Helm Chart

9/26/2019

I want to automatically deploy SonarQube on Kubernetes, so the goal is to have everything configued automatically. I successfully created a values.yaml for the helm chart that installs the LDAP plugin and configure it using our DC. But when configuring email settings like SMTP host, they seems ignored.

Already tried to completely delete the chart and re-installed it:

helm delete --purge sonarqube-test
helm install stable/sonarqube --namespace sonarqube-test --name sonarqube-test -f values-test.yaml

Altough I set e.g. http.proxyHost to our mailserver, it's still empty in the UI after deploying those values.yaml;

enter image description here

The sonarProperties property is documented and it seems to work: Other properties like from ldap were applied, since I can login using LDAP after updating the values.

I'm not sure if this is k8s related, since other said it works generally. I went into the container using kubectl exec and looked at the generated sonar.properties file, it seems fine:

$ cat /opt/sonarqube/conf/sonar.properties 
email.from=noreply@mydomain.com
email.fromName=SonarQube Test
email.prefix=[SONARQUBE Test]
email.smtp_host.secured=mymailserver.internal
sonar.security.realm=LDAP
sonar.updatecenter.activate=true
sonar.web.javaOpts=-Xmx2048m -Xms128m -XX:+HeapDumpOnOutOfMemoryError -serversonarqube

There were some more properties for LDAP like Bind user and so on, which I removed.

So why are the email settings not applied after updating the chart, and not even when it got completely deleted and re-deployed?

values.yaml

replicaCount: 1
image:
  tag: 7.9-community

service:
  type: ClusterIP
  port: 80

ingress:
  enabled: true
  hosts:
    - name: sonarqube-test.mycluster.internal
      path: /
  tls:
    - hosts:
      - sonarqube-test.mycluster.internal

persistence:
  enabled: true
  storageClass: nfs-client
  accessMode: ReadWriteOnce
  size: 10Gi

postgresql:
  enabled: true

plugins:
  install: 
    - "https://github.com/SonarSource/sonar-ldap/releases/download/2.2-RC3/sonar-ldap-plugin-2.2.0.601.jar"

sonarProperties:
  sonar.web.javaOpts: "-Xmx2048m -Xms128m -XX:+HeapDumpOnOutOfMemoryError -server"
  sonar.security.realm: LDAP
  ldap.url: "..."
  # More ldap config vars ...
  sonar.updatecenter.activate: true

  email.smtp_host.secured: "mymailserver.internal"
  email.fromName: "SonarQube Test"
  email.from: "noreply@mydomain.com"
  email.prefix: "[SONARQUBE Test]"

resources: 
  limits:
    cpu: 4000m
    memory: 8096Mi
  requests:
    cpu: 500m
    memory: 3096Mi
-- Daniel
kubernetes
properties-file
sonarqube

1 Answer

10/9/2019

You have defined chart for sonarqube and configured tls in your value.yaml file. Take notice that you don't specify secret name according to definition of sonarquebue your tls section should look like this. Remeber that you have to create this secret in proper namespace manually.

Template for configuring tls looks like this:

tls: []
# Secrets must be manually created in the namespace.
# - secretName: chart-example-tls
# hosts:
# - chart-example.local

So in your case this section should loks like this:

tls: []
# Secrets must be manually created in the namespace.
- secretName: your-secret-name
hosts:
- sonarqube-test.mycluster.internal

At the same time during configuration postgresql dependencies you didn't specify user, database, password and port for postgreSQL, which you should do because you choose to use this database instead of mySQL.

Here is template:

database:
type: "postgresql"
## Configuration values for postgresql dependency
## ref: https://github.com/kubernetes/charts/blob/master/stable/postgresql/README.md
postgresql:
# Enable to deploy the PostgreSQL chart
enabled: true
# To use an external PostgreSQL instance, set enabled to false and uncomment
# the line below:
# postgresServer: ""
# To use an external secret for the password for an external PostgreSQL
# instance, set enabled to false and provide the name of the secret on the
# line below:
# postgresPasswordSecret: ""
postgresUser: "sonarUser"
postgresPassword: "sonarPass"
postgresDatabase: "sonarDB"
# Specify the TCP port that PostgreSQL should use
service:
port: 5432

The most common cause of SMTP failures is because of a wrong outbound mail configuration. You have to introduce the following parameters in the SMTP configuration:

  • SMTP Host
  • SMTP Port
  • SMTP Username
  • SMTP Password
  • SMTP Encryption

Check that these parameters are those provided by your mail provider. Check that you have followed the “Configure outbound mail settings” section in the application documentation page.

In your case you didn't specify password, user name and port. Add follwing sections to your sonar.properities definition:

email.smtp_port.secured=port-name
email.smtp_secure_connection.secured=true
email.smtp_username.secured=your-username
email.smtp_password.secured=your-password

Next thing: Make sure that your cloud environment allows Traffic In SMTP Ports.

To avoid massive SPAM attacks, several clouds do not allow SMTP traffic in their default ports.

  • Google Cloud Platform does not allow SMTP traffic through default ports 25, 465 or 587
  • GoDaddy also blocks SMTP traffic.

Here is troubleshooting documenttion connected to SMTP issues: SMTP-issues. Make sure that you didn't have one of them.

Please let me know if its help.

-- MaggieO
Source: StackOverflow