Made Tiller ports configurable with `helm init`

Signed-off-by: Min Kyu Lee <mknicklee@gmail.com>
pull/5847/head
Min Kyu Lee 6 years ago
parent 116522b014
commit 5de0694626

@ -34,6 +34,7 @@ import (
"k8s.io/helm/pkg/helm"
"k8s.io/helm/pkg/helm/helmpath"
"k8s.io/helm/pkg/helm/portforwarder"
"k8s.io/helm/pkg/tiller/environment"
"k8s.io/helm/pkg/version"
)
@ -144,6 +145,9 @@ func newInitCmd(out io.Writer) *cobra.Command {
f.StringArrayVar(&i.opts.Values, "override", []string{}, "Override values for the Tiller Deployment manifest (can specify multiple or separate values with commas: key1=val1,key2=val2)")
f.BoolVar(&i.opts.AutoMountServiceAccountToken, "automount-service-account-token", true, "Auto-mount the given service account to tiller")
f.Int32Var(&i.opts.TillerPort, "tiller-port", environment.DefaultTillerPort, "Override Tiller port")
f.Int32Var(&i.opts.TillerProbePort, "tiller-probe-port", environment.DefaultTillerProbePort, "Override Tiller probe port")
return cmd
}

@ -36,7 +36,6 @@ import (
"k8s.io/helm/pkg/version"
"k8s.io/helm/pkg/chartutil"
"k8s.io/helm/pkg/tiller/environment"
)
// Install uses Kubernetes client to install Tiller.
@ -46,7 +45,7 @@ func Install(client kubernetes.Interface, opts *Options) error {
if err := createDeployment(client.ExtensionsV1beta1(), opts); err != nil {
return err
}
if err := createService(client.CoreV1(), opts.Namespace); err != nil {
if err := createService(client.CoreV1(), opts); err != nil {
return err
}
if opts.tls() {
@ -79,7 +78,7 @@ func Upgrade(client kubernetes.Interface, opts *Options) error {
// that didn't deploy the service, so install it.
_, err = client.CoreV1().Services(opts.Namespace).Get(serviceName, metav1.GetOptions{})
if apierrors.IsNotFound(err) {
return createService(client.CoreV1(), opts.Namespace)
return createService(client.CoreV1(), opts)
}
return err
}
@ -131,16 +130,16 @@ func Deployment(opts *Options) (*v1beta1.Deployment, error) {
}
// createService creates the Tiller service resource
func createService(client corev1.ServicesGetter, namespace string) error {
obj := generateService(namespace)
func createService(client corev1.ServicesGetter, opts *Options) error {
obj := generateService(opts)
_, err := client.Services(obj.Namespace).Create(obj)
return err
}
// Service gets a service object that can be used to generate a manifest as a
// string. This object should not be submitted directly to the Kubernetes api
func Service(namespace string) *v1.Service {
svc := generateService(namespace)
func Service(opts *Options) *v1.Service {
svc := generateService(opts)
svc.TypeMeta = metav1.TypeMeta{
Kind: "Service",
APIVersion: "v1",
@ -155,7 +154,7 @@ func TillerManifests(opts *Options) ([]string, error) {
return []string{}, err
}
svc := Service(opts.Namespace)
svc := Service(opts)
objs := []runtime.Object{dep, svc}
@ -227,8 +226,12 @@ func generateDeployment(opts *Options) (*v1beta1.Deployment, error) {
Image: opts.SelectImage(),
ImagePullPolicy: opts.pullPolicy(),
Ports: []v1.ContainerPort{
{ContainerPort: environment.DefaultTillerPort, Name: "tiller"},
{ContainerPort: environment.DefaultTillerProbePort, Name: "http"},
{ContainerPort: opts.TillerPort, Name: "tiller"},
{ContainerPort: opts.TillerProbePort, Name: "http"},
},
Args: []string{
"-listen", fmt.Sprintf(":%v", opts.TillerPort),
"-probe-listen", fmt.Sprintf(":%v", opts.TillerProbePort),
},
Env: []v1.EnvVar{
{Name: "TILLER_NAMESPACE", Value: opts.Namespace},
@ -238,7 +241,7 @@ func generateDeployment(opts *Options) (*v1beta1.Deployment, error) {
Handler: v1.Handler{
HTTPGet: &v1.HTTPGetAction{
Path: "/liveness",
Port: intstr.FromInt(environment.DefaultTillerProbePort),
Port: intstr.IntOrString{IntVal: opts.TillerProbePort},
},
},
InitialDelaySeconds: 1,
@ -248,7 +251,7 @@ func generateDeployment(opts *Options) (*v1beta1.Deployment, error) {
Handler: v1.Handler{
HTTPGet: &v1.HTTPGetAction{
Path: "/readiness",
Port: intstr.FromInt(environment.DefaultTillerProbePort),
Port: intstr.IntOrString{IntVal: opts.TillerProbePort},
},
},
InitialDelaySeconds: 1,
@ -329,11 +332,11 @@ func generateDeployment(opts *Options) (*v1beta1.Deployment, error) {
return d, nil
}
func generateService(namespace string) *v1.Service {
func generateService(opts *Options) *v1.Service {
labels := generateLabels(map[string]string{"name": "tiller"})
s := &v1.Service{
ObjectMeta: metav1.ObjectMeta{
Namespace: namespace,
Namespace: opts.Namespace,
Name: serviceName,
Labels: labels,
},
@ -342,7 +345,7 @@ func generateService(namespace string) *v1.Service {
Ports: []v1.ServicePort{
{
Name: "tiller",
Port: environment.DefaultTillerPort,
Port: opts.TillerPort,
TargetPort: intstr.FromString("tiller"),
},
},

@ -151,7 +151,7 @@ func TestDeployment_WithTLS(t *testing.T) {
}
func TestServiceManifest(t *testing.T) {
svc := Service(v1.NamespaceDefault)
svc := Service(&Options{Namespace: v1.NamespaceDefault})
if got := svc.ObjectMeta.Namespace; got != v1.NamespaceDefault {
t.Errorf("expected namespace %s, got %s", v1.NamespaceDefault, got)
@ -361,7 +361,7 @@ func TestUpgrade(t *testing.T) {
ServiceAccount: "serviceAccountToReplace",
UseCanary: false,
})
existingService := generateService(v1.NamespaceDefault)
existingService := generateService(&Options{Namespace: v1.NamespaceDefault})
fc := &fake.Clientset{}
fc.AddReactor("get", "deployments", func(action testcore.Action) (bool, runtime.Object, error) {
@ -445,7 +445,7 @@ func TestUgrade_newerVersion(t *testing.T) {
ServiceAccount: "serviceAccountToReplace",
UseCanary: false,
})
existingService := generateService(v1.NamespaceDefault)
existingService := generateService(&Options{Namespace: v1.NamespaceDefault})
fc := &fake.Clientset{}
fc.AddReactor("get", "deployments", func(action testcore.Action) (bool, runtime.Object, error) {
@ -505,7 +505,7 @@ func TestUpgrade_identical(t *testing.T) {
ServiceAccount: "serviceAccountToReplace",
UseCanary: false,
})
existingService := generateService(v1.NamespaceDefault)
existingService := generateService(&Options{Namespace: v1.NamespaceDefault})
fc := &fake.Clientset{}
fc.AddReactor("get", "deployments", func(action testcore.Action) (bool, runtime.Object, error) {
@ -546,7 +546,7 @@ func TestUpgrade_canaryClient(t *testing.T) {
ServiceAccount: "serviceAccountToReplace",
UseCanary: false,
})
existingService := generateService(v1.NamespaceDefault)
existingService := generateService(&Options{Namespace: v1.NamespaceDefault})
fc := &fake.Clientset{}
fc.AddReactor("get", "deployments", func(action testcore.Action) (bool, runtime.Object, error) {
@ -587,7 +587,7 @@ func TestUpgrade_canaryServer(t *testing.T) {
ServiceAccount: "serviceAccountToReplace",
UseCanary: false,
})
existingService := generateService(v1.NamespaceDefault)
existingService := generateService(&Options{Namespace: v1.NamespaceDefault})
fc := &fake.Clientset{}
fc.AddReactor("get", "deployments", func(action testcore.Action) (bool, runtime.Object, error) {

@ -102,6 +102,12 @@ type Options struct {
// Set merges additional values into the Tiller Deployment manifest.
Values []string
// TillerPort sets the gRPC port Tiller will listen on
TillerPort int32
// TillerProbePort sets the probe port Tiller will listen on
TillerProbePort int32
}
// SelectImage returns the image according to whether UseCanary is true or not

@ -49,6 +49,8 @@ helm init [flags]
--skip-refresh Do not refresh (download) the local repository cache
--stable-repo-url string URL for stable repository (default "https://kubernetes-charts.storage.googleapis.com")
-i, --tiller-image string Override Tiller image
--tiller-port int32 Override Tiller port (default 44134)
--tiller-probe-port int32 Override Tiller probe port (default 44135)
--tiller-tls Install Tiller with TLS enabled
--tiller-tls-cert string Path to TLS certificate file to install with Tiller
--tiller-tls-hostname string The server name used to verify the hostname on the returned certificates from Tiller
@ -75,4 +77,4 @@ helm init [flags]
* [helm](helm.md) - The Helm package manager for Kubernetes.
###### Auto generated by spf13/cobra on 16-May-2019
###### Auto generated by spf13/cobra on 5-Jun-2019

Loading…
Cancel
Save