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"
"k8s.io/helm/pkg/helm/helmpath" "k8s.io/helm/pkg/helm/helmpath"
"k8s.io/helm/pkg/helm/portforwarder" "k8s.io/helm/pkg/helm/portforwarder"
"k8s.io/helm/pkg/tiller/environment"
"k8s.io/helm/pkg/version" "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.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.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 return cmd
} }

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

@ -151,7 +151,7 @@ func TestDeployment_WithTLS(t *testing.T) {
} }
func TestServiceManifest(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 { if got := svc.ObjectMeta.Namespace; got != v1.NamespaceDefault {
t.Errorf("expected namespace %s, got %s", v1.NamespaceDefault, got) t.Errorf("expected namespace %s, got %s", v1.NamespaceDefault, got)
@ -361,7 +361,7 @@ func TestUpgrade(t *testing.T) {
ServiceAccount: "serviceAccountToReplace", ServiceAccount: "serviceAccountToReplace",
UseCanary: false, UseCanary: false,
}) })
existingService := generateService(v1.NamespaceDefault) existingService := generateService(&Options{Namespace: v1.NamespaceDefault})
fc := &fake.Clientset{} fc := &fake.Clientset{}
fc.AddReactor("get", "deployments", func(action testcore.Action) (bool, runtime.Object, error) { fc.AddReactor("get", "deployments", func(action testcore.Action) (bool, runtime.Object, error) {
@ -445,7 +445,7 @@ func TestUgrade_newerVersion(t *testing.T) {
ServiceAccount: "serviceAccountToReplace", ServiceAccount: "serviceAccountToReplace",
UseCanary: false, UseCanary: false,
}) })
existingService := generateService(v1.NamespaceDefault) existingService := generateService(&Options{Namespace: v1.NamespaceDefault})
fc := &fake.Clientset{} fc := &fake.Clientset{}
fc.AddReactor("get", "deployments", func(action testcore.Action) (bool, runtime.Object, error) { fc.AddReactor("get", "deployments", func(action testcore.Action) (bool, runtime.Object, error) {
@ -505,7 +505,7 @@ func TestUpgrade_identical(t *testing.T) {
ServiceAccount: "serviceAccountToReplace", ServiceAccount: "serviceAccountToReplace",
UseCanary: false, UseCanary: false,
}) })
existingService := generateService(v1.NamespaceDefault) existingService := generateService(&Options{Namespace: v1.NamespaceDefault})
fc := &fake.Clientset{} fc := &fake.Clientset{}
fc.AddReactor("get", "deployments", func(action testcore.Action) (bool, runtime.Object, error) { fc.AddReactor("get", "deployments", func(action testcore.Action) (bool, runtime.Object, error) {
@ -546,7 +546,7 @@ func TestUpgrade_canaryClient(t *testing.T) {
ServiceAccount: "serviceAccountToReplace", ServiceAccount: "serviceAccountToReplace",
UseCanary: false, UseCanary: false,
}) })
existingService := generateService(v1.NamespaceDefault) existingService := generateService(&Options{Namespace: v1.NamespaceDefault})
fc := &fake.Clientset{} fc := &fake.Clientset{}
fc.AddReactor("get", "deployments", func(action testcore.Action) (bool, runtime.Object, error) { fc.AddReactor("get", "deployments", func(action testcore.Action) (bool, runtime.Object, error) {
@ -587,7 +587,7 @@ func TestUpgrade_canaryServer(t *testing.T) {
ServiceAccount: "serviceAccountToReplace", ServiceAccount: "serviceAccountToReplace",
UseCanary: false, UseCanary: false,
}) })
existingService := generateService(v1.NamespaceDefault) existingService := generateService(&Options{Namespace: v1.NamespaceDefault})
fc := &fake.Clientset{} fc := &fake.Clientset{}
fc.AddReactor("get", "deployments", func(action testcore.Action) (bool, runtime.Object, error) { 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. // Set merges additional values into the Tiller Deployment manifest.
Values []string 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 // 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 --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") --stable-repo-url string URL for stable repository (default "https://kubernetes-charts.storage.googleapis.com")
-i, --tiller-image string Override Tiller image -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 Install Tiller with TLS enabled
--tiller-tls-cert string Path to TLS certificate file to install with Tiller --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 --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. * [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