Skip to content

Commit b0b737c

Browse files
tototomanOtmane TAZI
and
Otmane TAZI
authoredAug 5, 2022
Allow selecting a specific service account for privileged containers (#125)
Co-authored-by: Otmane TAZI <otmane.tazi@amadeus.com>
1 parent cdd0163 commit b0b737c

File tree

4 files changed

+21
-4
lines changed

4 files changed

+21
-4
lines changed
 

‎kube/kubernetes_api_service.go

+6-2
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ type KubernetesApiService interface {
2525

2626
DeletePod(podName string) error
2727

28-
CreatePrivilegedPod(nodeName string, containerName string, image string, socketPath string, timeout time.Duration) (*corev1.Pod, error)
28+
CreatePrivilegedPod(nodeName string, containerName string, image string, socketPath string, timeout time.Duration, serviceaccount string) (*corev1.Pod, error)
2929

3030
UploadFile(localPath string, remotePath string, podName string, containerName string) error
3131
}
@@ -102,7 +102,7 @@ func (k *KubernetesApiServiceImpl) DeletePod(podName string) error {
102102
return err
103103
}
104104

105-
func (k *KubernetesApiServiceImpl) CreatePrivilegedPod(nodeName string, containerName string, image string, socketPath string, timeout time.Duration) (*corev1.Pod, error) {
105+
func (k *KubernetesApiServiceImpl) CreatePrivilegedPod(nodeName string, containerName string, image string, socketPath string, timeout time.Duration, serviceaccount string) (*corev1.Pod, error) {
106106
log.Debugf("creating privileged pod on remote node")
107107

108108
isSupported, err := k.IsSupportedContainerRuntime(nodeName)
@@ -194,6 +194,10 @@ func (k *KubernetesApiServiceImpl) CreatePrivilegedPod(nodeName string, containe
194194
},
195195
}
196196

197+
if serviceaccount != "" {
198+
podSpecs.ServiceAccountName = serviceaccount
199+
}
200+
197201
pod := corev1.Pod{
198202
TypeMeta: typeMetadata,
199203
ObjectMeta: objectMetadata,

‎pkg/cmd/sniff.go

+11-1
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,11 @@ func NewCmdSniff(streams genericclioptions.IOStreams) *cobra.Command {
150150
_ = viper.BindEnv("socket", "KUBECTL_PLUGINS_SOCKET_PATH")
151151
_ = viper.BindPFlag("socket", cmd.Flags().Lookup("socket"))
152152

153+
cmd.Flags().StringVarP(&ksniffSettings.UserSpecifiedServiceAccount, "serviceaccount", "s", "",
154+
"the privileged container service account (optional)")
155+
_ = viper.BindEnv("serviceaccount", "KUBECTL_PLUGINS_LOCAL_FLAG_SERVICE_ACCOUNT")
156+
_ = viper.BindPFlag("serviceaccount", cmd.Flags().Lookup("serviceaccount"))
157+
153158
return cmd
154159
}
155160

@@ -178,10 +183,10 @@ func (o *Ksniff) Complete(cmd *cobra.Command, args []string) error {
178183
o.settings.Image = viper.GetString("image")
179184
o.settings.TCPDumpImage = viper.GetString("tcpdump-image")
180185
o.settings.SocketPath = viper.GetString("socket")
181-
182186
o.settings.UseDefaultImage = !viper.IsSet("image")
183187
o.settings.UseDefaultTCPDumpImage = !viper.IsSet("tcpdump-image")
184188
o.settings.UseDefaultSocketPath = !viper.IsSet("socket")
189+
o.settings.UserSpecifiedServiceAccount = viper.GetString("serviceaccount")
185190

186191
var err error
187192

@@ -276,6 +281,11 @@ func (o *Ksniff) Validate() error {
276281
}
277282

278283
log.Infof("using tcpdump path at: '%s'", o.settings.UserSpecifiedLocalTcpdumpPath)
284+
} else if o.settings.UserSpecifiedServiceAccount != "" {
285+
_, err := o.clientset.CoreV1().ServiceAccounts(o.resultingContext.Namespace).Get(context.TODO(), o.settings.UserSpecifiedServiceAccount, v1.GetOptions{})
286+
if err != nil {
287+
return err
288+
}
279289
}
280290

281291
pod, err := o.clientset.CoreV1().Pods(o.resultingContext.Namespace).Get(context.TODO(), o.settings.UserSpecifiedPodName, v1.GetOptions{})

‎pkg/config/settings.go

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
package config
22

33
import (
4-
"k8s.io/cli-runtime/pkg/genericclioptions"
54
"time"
5+
6+
"k8s.io/cli-runtime/pkg/genericclioptions"
67
)
78

89
type KsniffSettings struct {
@@ -28,6 +29,7 @@ type KsniffSettings struct {
2829
UserSpecifiedKubeContext string
2930
SocketPath string
3031
UseDefaultSocketPath bool
32+
UserSpecifiedServiceAccount string
3133
}
3234

3335
func NewKsniffSettings(streams genericclioptions.IOStreams) *KsniffSettings {

‎pkg/service/sniffer/privileged_pod_sniffer_service.go

+1
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ func (p *PrivilegedPodSnifferService) Setup() error {
4848
p.settings.Image,
4949
p.settings.SocketPath,
5050
p.settings.UserSpecifiedPodCreateTimeout,
51+
p.settings.UserSpecifiedServiceAccount,
5152
)
5253
if err != nil {
5354
log.WithError(err).Errorf("failed to create privileged pod on node: '%s'", p.settings.DetectedPodNodeName)

0 commit comments

Comments
 (0)
Please sign in to comment.