Merge pull request #297 from salluvada/master

Configure kubernetes plugin with FQDNs for jenkins http and slave services
This commit is contained in:
Tomasz Sęk 2020-03-24 18:29:04 +01:00 committed by GitHub
commit 894b36b443
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 48 additions and 8 deletions

View File

@ -30,15 +30,21 @@ rules:
resources: resources:
- serviceaccounts - serviceaccounts
verbs: verbs:
- get
- create - create
- list
- watch
- apiGroups: - apiGroups:
- rbac.authorization.k8s.io - rbac.authorization.k8s.io
resources: resources:
- roles - roles
- rolebindings - rolebindings
verbs: verbs:
- get
- create - create
- update - update
- list
- watch
- apiGroups: - apiGroups:
- "" - ""
resources: resources:

View File

@ -2,6 +2,7 @@ package resources
import ( import (
"fmt" "fmt"
"github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2" "github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2"
"github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/constants" "github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/constants"
@ -187,8 +188,8 @@ func NewBaseConfigurationConfigMap(meta metav1.ObjectMeta, jenkins *v1alpha2.Jen
disableInsecureFeaturesGroovyScriptName: disableInsecureFeatures, disableInsecureFeaturesGroovyScriptName: disableInsecureFeatures,
configureKubernetesPluginGroovyScriptName: fmt.Sprintf(configureKubernetesPluginFmt, configureKubernetesPluginGroovyScriptName: fmt.Sprintf(configureKubernetesPluginFmt,
jenkins.ObjectMeta.Namespace, jenkins.ObjectMeta.Namespace,
fmt.Sprintf("http://%s.%s:%d", GetJenkinsHTTPServiceName(jenkins), jenkins.ObjectMeta.Namespace, jenkins.Spec.Service.Port), fmt.Sprintf("http://%s:%d", GetJenkinsHTTPServiceFQDN(jenkins), jenkins.Spec.Service.Port),
fmt.Sprintf("%s.%s:%d", GetJenkinsSlavesServiceName(jenkins), jenkins.ObjectMeta.Namespace, jenkins.Spec.SlaveService.Port), fmt.Sprintf("%s:%d", GetJenkinsSlavesServiceFQDN(jenkins), jenkins.Spec.SlaveService.Port),
), ),
configureViewsGroovyScriptName: configureViews, configureViewsGroovyScriptName: configureViews,
disableJobDslScriptApprovalGroovyScriptName: disableJobDSLScriptApproval, disableJobDslScriptApprovalGroovyScriptName: disableJobDSLScriptApproval,

View File

@ -7,6 +7,9 @@ import (
"github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/constants" "github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/constants"
corev1 "k8s.io/api/core/v1" corev1 "k8s.io/api/core/v1"
"net"
"strings"
) )
// UpdateService returns new service with override fields from config // UpdateService returns new service with override fields from config
@ -38,3 +41,35 @@ func GetJenkinsHTTPServiceName(jenkins *v1alpha2.Jenkins) string {
func GetJenkinsSlavesServiceName(jenkins *v1alpha2.Jenkins) string { func GetJenkinsSlavesServiceName(jenkins *v1alpha2.Jenkins) string {
return fmt.Sprintf("%s-slave-%s", constants.OperatorName, jenkins.ObjectMeta.Name) return fmt.Sprintf("%s-slave-%s", constants.OperatorName, jenkins.ObjectMeta.Name)
} }
// GetJenkinsHTTPServiceFQDN returns Kubernetes service FQDN used for expose Jenkins HTTP endpoint
func GetJenkinsHTTPServiceFQDN(jenkins *v1alpha2.Jenkins) string {
clusterDomain := getClusterDomain()
return fmt.Sprintf("%s-http-%s.%s.svc.%s", constants.OperatorName, jenkins.ObjectMeta.Name, jenkins.ObjectMeta.Namespace, clusterDomain)
}
// GetJenkinsSlavesServiceFQDN returns Kubernetes service FQDN used for expose Jenkins slave endpoint
func GetJenkinsSlavesServiceFQDN(jenkins *v1alpha2.Jenkins) string {
clusterDomain := getClusterDomain()
return fmt.Sprintf("%s-slave-%s.%s.svc.%s", constants.OperatorName, jenkins.ObjectMeta.Name, jenkins.ObjectMeta.Namespace, clusterDomain)
}
// GetClusterDomain returns Kubernetes cluster domain, default to "cluster.local"
func getClusterDomain() string {
apiSvc := "kubernetes.default.svc"
clusterDomain := "cluster.local"
cname, err := net.LookupCNAME(apiSvc)
if err != nil {
return clusterDomain
}
clusterDomain = strings.TrimPrefix(cname, "kubernetes.default.svc")
clusterDomain = strings.TrimPrefix(clusterDomain, ".")
clusterDomain = strings.TrimSuffix(clusterDomain, ".")
return clusterDomain
}

View File

@ -402,9 +402,8 @@ func agentDeployment(jenkins *v1alpha2.Jenkins, namespace string, agentName stri
Env: []corev1.EnvVar{ Env: []corev1.EnvVar{
{ {
Name: "JENKINS_TUNNEL", Name: "JENKINS_TUNNEL",
Value: fmt.Sprintf("%s.%s:%d", Value: fmt.Sprintf("%s:%d",
resources.GetJenkinsSlavesServiceName(jenkins), resources.GetJenkinsSlavesServiceFQDN(jenkins),
jenkins.ObjectMeta.Namespace,
jenkins.Spec.SlaveService.Port), jenkins.Spec.SlaveService.Port),
}, },
{ {
@ -417,9 +416,8 @@ func agentDeployment(jenkins *v1alpha2.Jenkins, namespace string, agentName stri
}, },
{ {
Name: "JENKINS_URL", Name: "JENKINS_URL",
Value: fmt.Sprintf("http://%s.%s:%d", Value: fmt.Sprintf("http://%s:%d",
resources.GetJenkinsHTTPServiceName(jenkins), resources.GetJenkinsHTTPServiceFQDN(jenkins),
jenkins.ObjectMeta.Namespace,
jenkins.Spec.Service.Port, jenkins.Spec.Service.Port,
), ),
}, },