Fixed standalone config, small refactor (#589)

This commit is contained in:
RoyUP9 2022-01-06 12:04:58 +02:00 committed by GitHub
parent 833d08bb40
commit b88bdb90f6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 33 additions and 19 deletions

View File

@ -50,7 +50,9 @@ func PostTapConfig(c *gin.Context) {
c.JSON(http.StatusInternalServerError, err) c.JSON(http.StatusInternalServerError, err)
return return
} }
ctx, cancel := context.WithCancel(context.Background()) ctx, cancel := context.WithCancel(context.Background())
if _, err := startMizuTapperSyncer(ctx, kubernetesProvider, tappedNamespaces, *podRegex, []string{}, tapApi.TrafficFilteringOptions{}, false); err != nil { if _, err := startMizuTapperSyncer(ctx, kubernetesProvider, tappedNamespaces, *podRegex, []string{}, tapApi.TrafficFilteringOptions{}, false); err != nil {
c.JSON(http.StatusInternalServerError, err) c.JSON(http.StatusInternalServerError, err)
cancel() cancel()
@ -69,25 +71,27 @@ func GetTapConfig(c *gin.Context) {
c.JSON(http.StatusInternalServerError, err) c.JSON(http.StatusInternalServerError, err)
return return
} }
ctx, cancel := context.WithCancel(context.Background()) ctx, cancel := context.WithCancel(context.Background())
defer cancel() defer cancel()
namespaces, err := kubernetesProvider.ListAllNamespaces(ctx) namespaces, err := kubernetesProvider.ListAllNamespaces(ctx)
if err != nil { if err != nil {
c.JSON(http.StatusInternalServerError, err) c.JSON(http.StatusInternalServerError, err)
return return
} }
tappedNamespaces := make(map[string]bool)
for _, namespace := range namespaces { for _, namespace := range namespaces {
if namespace.Name == config.Config.MizuResourcesNamespace { if namespace.Name == config.Config.MizuResourcesNamespace {
continue continue
} }
if _, ok := globalTapConfig.TappedNamespaces[namespace.Name]; !ok { tappedNamespaces[namespace.Name] = globalTapConfig.TappedNamespaces[namespace.Name]
globalTapConfig.TappedNamespaces[namespace.Name] = false
}
} }
c.JSON(http.StatusOK, globalTapConfig) tapConfig := models.TapConfig{TappedNamespaces: tappedNamespaces}
c.JSON(http.StatusOK, tapConfig)
} }
func startMizuTapperSyncer(ctx context.Context, provider *kubernetes.Provider, targetNamespaces []string, podFilterRegex regexp.Regexp, ignoredUserAgents []string, mizuApiFilteringOptions tapApi.TrafficFilteringOptions, istio bool) (*kubernetes.MizuTapperSyncer, error) { func startMizuTapperSyncer(ctx context.Context, provider *kubernetes.Provider, targetNamespaces []string, podFilterRegex regexp.Regexp, ignoredUserAgents []string, mizuApiFilteringOptions tapApi.TrafficFilteringOptions, istio bool) (*kubernetes.MizuTapperSyncer, error) {

View File

@ -3,10 +3,12 @@ package routes
import ( import (
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"mizuserver/pkg/controllers" "mizuserver/pkg/controllers"
"mizuserver/pkg/middlewares"
) )
func ConfigRoutes(ginApp *gin.Engine) { func ConfigRoutes(ginApp *gin.Engine) {
routeGroup := ginApp.Group("/config") routeGroup := ginApp.Group("/config")
routeGroup.Use(middlewares.RequiresAuth())
routeGroup.POST("/tapConfig", controllers.PostTapConfig) routeGroup.POST("/tapConfig", controllers.PostTapConfig)
routeGroup.GET("/tapConfig", controllers.GetTapConfig) routeGroup.GET("/tapConfig", controllers.GetTapConfig)

View File

@ -1,7 +1,9 @@
package cmd package cmd
import ( import (
"fmt"
"github.com/spf13/cobra" "github.com/spf13/cobra"
"github.com/up9inc/mizu/cli/config"
"github.com/up9inc/mizu/cli/telemetry" "github.com/up9inc/mizu/cli/telemetry"
) )
@ -13,6 +15,13 @@ var installCmd = &cobra.Command{
runMizuInstall() runMizuInstall()
return nil return nil
}, },
PreRunE: func(cmd *cobra.Command, args []string) error {
if config.Config.IsNsRestrictedMode() {
return fmt.Errorf("install is not supported in restricted namespace mode")
}
return nil
},
} }
func init() { func init() {

View File

@ -22,10 +22,6 @@ func runMizuInstall() {
return return
} }
if config.Config.IsNsRestrictedMode() {
logger.Log.Error("install is not supported in restricted namespace mode")
}
ctx, cancel := context.WithCancel(context.Background()) ctx, cancel := context.WithCancel(context.Background())
defer cancel() // cancel will be called when this function exits defer cancel() // cancel will be called when this function exits

View File

@ -125,7 +125,6 @@ func RunMizuTap() {
logger.Log.Infof("Waiting for Mizu Agent to start...") logger.Log.Infof("Waiting for Mizu Agent to start...")
if state.mizuServiceAccountExists, err = resources.CreateTapMizuResources(ctx, kubernetesProvider, serializedValidationRules, serializedContract, serializedMizuConfig, config.Config.IsNsRestrictedMode(), config.Config.MizuResourcesNamespace, config.Config.AgentImage, getSyncEntriesConfig(), config.Config.Tap.MaxEntriesDBSizeBytes(), config.Config.Tap.ApiServerResources, config.Config.ImagePullPolicy(), config.Config.LogLevel()); err != nil { if state.mizuServiceAccountExists, err = resources.CreateTapMizuResources(ctx, kubernetesProvider, serializedValidationRules, serializedContract, serializedMizuConfig, config.Config.IsNsRestrictedMode(), config.Config.MizuResourcesNamespace, config.Config.AgentImage, getSyncEntriesConfig(), config.Config.Tap.MaxEntriesDBSizeBytes(), config.Config.Tap.ApiServerResources, config.Config.ImagePullPolicy(), config.Config.LogLevel()); err != nil {
logger.Log.Errorf("error %v", err)
var statusError *k8serrors.StatusError var statusError *k8serrors.StatusError
if errors.As(err, &statusError) { if errors.As(err, &statusError) {
if statusError.ErrStatus.Reason == metav1.StatusReasonAlreadyExists { if statusError.ErrStatus.Reason == metav1.StatusReasonAlreadyExists {

View File

@ -66,25 +66,29 @@ func CreateTapMizuResources(ctx context.Context, kubernetesProvider *kubernetes.
} }
func CreateInstallMizuResources(ctx context.Context, kubernetesProvider *kubernetes.Provider, serializedValidationRules string, serializedContract string, serializedMizuConfig string, isNsRestrictedMode bool, mizuResourcesNamespace string, agentImage string, syncEntriesConfig *shared.SyncEntriesConfig, maxEntriesDBSizeBytes int64, apiServerResources shared.Resources, imagePullPolicy core.PullPolicy, logLevel logging.Level, noPersistentVolumeClaim bool) error { func CreateInstallMizuResources(ctx context.Context, kubernetesProvider *kubernetes.Provider, serializedValidationRules string, serializedContract string, serializedMizuConfig string, isNsRestrictedMode bool, mizuResourcesNamespace string, agentImage string, syncEntriesConfig *shared.SyncEntriesConfig, maxEntriesDBSizeBytes int64, apiServerResources shared.Resources, imagePullPolicy core.PullPolicy, logLevel logging.Level, noPersistentVolumeClaim bool) error {
if !isNsRestrictedMode { if err := createMizuNamespace(ctx, kubernetesProvider, mizuResourcesNamespace); err != nil {
if err := createMizuNamespace(ctx, kubernetesProvider, mizuResourcesNamespace); err != nil { return err
return err
}
} }
logger.Log.Infof("namespace/%v created", mizuResourcesNamespace)
if err := createMizuConfigmap(ctx, kubernetesProvider, serializedValidationRules, serializedContract, serializedMizuConfig, mizuResourcesNamespace); err != nil { if err := createMizuConfigmap(ctx, kubernetesProvider, serializedValidationRules, serializedContract, serializedMizuConfig, mizuResourcesNamespace); err != nil {
return err return err
} }
logger.Log.Infof("Created config map") logger.Log.Infof("configmap/%v created", kubernetes.ConfigMapName)
_, err := createRBACIfNecessary(ctx, kubernetesProvider, isNsRestrictedMode, mizuResourcesNamespace, []string{"pods", "services", "endpoints", "namespaces"}) _, err := createRBACIfNecessary(ctx, kubernetesProvider, isNsRestrictedMode, mizuResourcesNamespace, []string{"pods", "services", "endpoints", "namespaces"})
if err != nil { if err != nil {
return err return err
} }
logger.Log.Infof("serviceaccount/%v created", kubernetes.ServiceAccountName)
logger.Log.Infof("clusterrole.rbac.authorization.k8s.io/%v created", kubernetes.ClusterRoleName)
logger.Log.Infof("clusterrolebinding.rbac.authorization.k8s.io/%v created", kubernetes.ClusterRoleBindingName)
if err := kubernetesProvider.CreateDaemonsetRBAC(ctx, mizuResourcesNamespace, kubernetes.ServiceAccountName, kubernetes.DaemonRoleName, kubernetes.DaemonRoleBindingName, mizu.RBACVersion); err != nil { if err := kubernetesProvider.CreateDaemonsetRBAC(ctx, mizuResourcesNamespace, kubernetes.ServiceAccountName, kubernetes.DaemonRoleName, kubernetes.DaemonRoleBindingName, mizu.RBACVersion); err != nil {
return err return err
} }
logger.Log.Infof("Created RBAC") logger.Log.Infof("role.rbac.authorization.k8s.io/%v created", kubernetes.DaemonRoleName)
logger.Log.Infof("rolebinding.rbac.authorization.k8s.io/%v created", kubernetes.DaemonRoleBindingName)
serviceAccountName := kubernetes.ServiceAccountName serviceAccountName := kubernetes.ServiceAccountName
opts := &kubernetes.ApiServerOptions{ opts := &kubernetes.ApiServerOptions{
@ -103,13 +107,13 @@ func CreateInstallMizuResources(ctx context.Context, kubernetesProvider *kuberne
if err := createMizuApiServerDeployment(ctx, kubernetesProvider, opts, noPersistentVolumeClaim); err != nil { if err := createMizuApiServerDeployment(ctx, kubernetesProvider, opts, noPersistentVolumeClaim); err != nil {
return err return err
} }
logger.Log.Infof("Created Api Server deployment") logger.Log.Infof("deployment.apps/%v created", kubernetes.ApiServerPodName)
_, err = kubernetesProvider.CreateService(ctx, mizuResourcesNamespace, kubernetes.ApiServerPodName, kubernetes.ApiServerPodName) _, err = kubernetesProvider.CreateService(ctx, mizuResourcesNamespace, kubernetes.ApiServerPodName, kubernetes.ApiServerPodName)
if err != nil { if err != nil {
return err return err
} }
logger.Log.Infof("Created Api Server service") logger.Log.Infof("service/%v created", kubernetes.ApiServerPodName)
return nil return nil
} }

View File

@ -4,9 +4,9 @@ const (
MizuResourcesPrefix = "mizu-" MizuResourcesPrefix = "mizu-"
ApiServerPodName = MizuResourcesPrefix + "api-server" ApiServerPodName = MizuResourcesPrefix + "api-server"
ClusterRoleBindingName = MizuResourcesPrefix + "cluster-role-binding" ClusterRoleBindingName = MizuResourcesPrefix + "cluster-role-binding"
DaemonRoleBindingName = MizuResourcesPrefix + "cluster-role-binding-daemon" DaemonRoleBindingName = MizuResourcesPrefix + "role-binding-daemon"
ClusterRoleName = MizuResourcesPrefix + "cluster-role" ClusterRoleName = MizuResourcesPrefix + "cluster-role"
DaemonRoleName = MizuResourcesPrefix + "cluster-role-daemon" DaemonRoleName = MizuResourcesPrefix + "role-daemon"
K8sAllNamespaces = "" K8sAllNamespaces = ""
RoleBindingName = MizuResourcesPrefix + "role-binding" RoleBindingName = MizuResourcesPrefix + "role-binding"
RoleName = MizuResourcesPrefix + "role" RoleName = MizuResourcesPrefix + "role"