util

package
v2.2.6 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 16, 2024 License: MIT Imports: 116 Imported by: 2

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func AddAllowFirewallRule

func AddAllowFirewallRule()

func AllContainerIsRunning

func AllContainerIsRunning(pod *corev1.Pod) bool

func BytesToInt

func BytesToInt(b []byte) uint32

func CanI

func CanI(clientset *kubernetes.Clientset, sa, ns string, resource *rbacv1.PolicyRule) (allowed bool, err error)

func CheckPodStatus added in v2.2.5

func CheckPodStatus(cCtx context.Context, cFunc context.CancelFunc, podName string, podInterface v12.PodInterface)

func CleanExtensionLib

func CleanExtensionLib()

func ConvertK8sApiServerToDomain added in v2.2.5

func ConvertK8sApiServerToDomain(kubeConfigPath string) (newPath string, err error)

func ConvertToKubeConfigBytes added in v2.2.5

func ConvertToKubeConfigBytes(factory cmdutil.Factory) ([]byte, string, error)

func ConvertToTempKubeconfigFile

func ConvertToTempKubeconfigFile(kubeconfigBytes []byte) (string, error)

func CopyVolumeIntoContainer added in v2.2.5

func CopyVolumeIntoContainer(ctx context.Context, volume []mount.Mount, cli *client.Client, id string) error

func CreateCIDRPod added in v2.2.5

func CreateCIDRPod(ctx context.Context, clientset *kubernetes.Clientset, namespace string) (*v12.Pod, error)

func CreateFolder added in v2.2.5

func CreateFolder(ctx context.Context, cli *client.Client, id string, src string, target string) (string, error)

func Deduplicate

func Deduplicate(cidr []*net.IPNet) (result []*net.IPNet)

func DeleteAllowFirewallRule

func DeleteAllowFirewallRule()

func DeleteBlockFirewallRule

func DeleteBlockFirewallRule(_ context.Context)

func DialSshRemote

func DialSshRemote(conf *SshConfig) (remote *ssh.Client, err error)

DialSshRemote https://github.com/golang/go/issues/21478

func DoReq

func DoReq(request *http.Request) (body []byte, err error)

func FindAllowFirewallRule

func FindAllowFirewallRule() bool

func FindContainerByName added in v2.2.2

func FindContainerByName(pod *corev1.Pod, name string) (*corev1.Container, int)

func FindContainerEnv added in v2.2.2

func FindContainerEnv(container *corev1.Container, key string) (value string, found bool)

func GetAnnotation

func GetAnnotation(f util.Factory, ns string, resources string) (map[string]string, error)

func GetAvailableTCPPortOrDie

func GetAvailableTCPPortOrDie() (int, error)

func GetAvailableUDPPortOrDie

func GetAvailableUDPPortOrDie() (int, error)

func GetCIDRByDumpClusterInfo added in v2.2.5

func GetCIDRByDumpClusterInfo(ctx context.Context, clientset *kubernetes.Clientset) ([]*net.IPNet, error)

GetCIDRByDumpClusterInfo root 22008 21846 14 Jan18 ? 6-22:53:35 kube-apiserver --advertise-address=10.56.95.185 --allow-privileged=true --anonymous-auth=True --apiserver-count=3 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --client-ca-file=/etc/kubernetes/ssl/ca.crt --default-not-ready-toleration-seconds=300 --default-unreachable-toleration-seconds=300 --enable-admission-plugins=NodeRestriction --enable-aggregator-routing=False --enable-bootstrap-token-auth=true --endpoint-reconciler-type=lease --etcd-cafile=/etc/ssl/etcd/ssl/ca.pem --etcd-certfile=/etc/ssl/etcd/ssl/node-kube-control-1.pem --etcd-keyfile=/etc/ssl/etcd/ssl/node-kube-control-1-key.pem --etcd-servers=https://10.56.95.185:2379,https://10.56.95.186:2379,https://10.56.95.187:2379 --etcd-servers-overrides=/events#https://10.56.95.185:2381;https://10.56.95.186:2381;https://10.56.95.187:2381 --event-ttl=1h0m0s --insecure-port=0 --kubelet-certificate-authority=/etc/kubernetes/ssl/kubelet/kubelet-ca.crt --kubelet-client-certificate=/etc/kubernetes/ssl/apiserver-kubelet-client.crt --kubelet-client-key=/etc/kubernetes/ssl/apiserver-kubelet-client.key --kubelet-preferred-address-types=InternalDNS,InternalIP,Hostname,ExternalDNS,ExternalIP --profiling=False --proxy-client-cert-file=/etc/kubernetes/ssl/front-proxy-client.crt --proxy-client-key-file=/etc/kubernetes/ssl/front-proxy-client.key --request-timeout=1m0s --requestheader-allowed-names=front-proxy-client --requestheader-client-ca-file=/etc/kubernetes/ssl/front-proxy-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/etc/kubernetes/ssl/sa.pub --service-account-signing-key-file=/etc/kubernetes/ssl/sa.key --service-cluster-ip-range=10.233.0.0/18 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/etc/kubernetes/ssl/apiserver.crt --tls-private-key-file=/etc/kubernetes/ssl/apiserver.key ref: https://kubernetes.io/docs/concepts/services-networking/dual-stack/#configure-ipv4-ipv6-dual-stack get cidr by dump cluster info

func GetCIDRElegant

func GetCIDRElegant(ctx context.Context, clientset *kubernetes.Clientset, restclient *rest.RESTClient, restconfig *rest.Config, namespace string) ([]*net.IPNet, error)

GetCIDRElegant 1) dump cluster info 2) grep cmdline 3) create svc + cat *.conflist 4) create svc + get pod ip with svc mask

func GetCIDRFromCNI added in v2.2.5

func GetCIDRFromCNI(ctx context.Context, clientset *kubernetes.Clientset, restclient *rest.RESTClient, restconfig *rest.Config, namespace string) ([]*net.IPNet, error)

GetCIDRFromCNI kube-controller-manager--allocate-node-cidrs=true--authentication-kubeconfig=/etc/kubernetes/controller-manager.conf--authorization-kubeconfig=/etc/kubernetes/controller-manager.conf--bind-address=0.0.0.0--client-ca-file=/etc/kubernetes/ssl/ca.crt--cluster-cidr=10.233.64.0/18--cluster-name=cluster.local--cluster-signing-cert-file=/etc/kubernetes/ssl/ca.crt--cluster-signing-key-file=/etc/kubernetes/ssl/ca.key--configure-cloud-routes=false--controllers=*,bootstrapsigner,tokencleaner--kubeconfig=/etc/kubernetes/controller-manager.conf--leader-elect=true--leader-elect-lease-duration=15s--leader-elect-renew-deadline=10s--node-cidr-mask-size=24--node-monitor-grace-period=40s--node-monitor-period=5s--port=0--profiling=False--requestheader-client-ca-file=/etc/kubernetes/ssl/front-proxy-ca.crt--root-ca-file=/etc/kubernetes/ssl/ca.crt--service-account-private-key-file=/etc/kubernetes/ssl/sa.key--service-cluster-ip-range=10.233.0.0/18--terminated-pod-gc-threshold=12500--use-service-account-credentials=true

func GetCIDRFromResourceUgly

func GetCIDRFromResourceUgly(ctx context.Context, clientset *kubernetes.Clientset, namespace string) []*net.IPNet

GetCIDRFromResourceUgly use podIP/24 and serviceIP/24 as cidr

func GetClient

func GetClient() (*client.Client, *command.DockerCli, error)

func GetClusterId

func GetClusterId(client v12.ConfigMapInterface) (types.UID, error)

func GetDNS added in v2.2.5

func GetDNS(ctx context.Context, f util.Factory, ns, pod string) (*dns.ClientConfig, error)

func GetDNSIPFromDnsPod

func GetDNSIPFromDnsPod(ctx context.Context, clientset *kubernetes.Clientset) (ips []string, err error)

func GetDNSServiceIPFromPod

func GetDNSServiceIPFromPod(ctx context.Context, clientset *kubernetes.Clientset, restclient *rest.RESTClient, config *rest.Config, podName, namespace string) (*dns.ClientConfig, error)

func GetEnv

func GetEnv(ctx context.Context, f util.Factory, ns, pod string) (map[string][]string, error)

func GetIPBaseNic

func GetIPBaseNic() (*net.IPNet, error)

func GetKrb5Path

func GetKrb5Path() string

func GetKubeConfigPath added in v2.2.5

func GetKubeConfigPath(f cmdutil.Factory) string

func GetKubeconfigCluster added in v2.2.5

func GetKubeconfigCluster(f cmdutil.Factory) string

func GetKubeconfigPath

func GetKubeconfigPath(factory cmdutil.Factory) (string, error)

func GetLocalTunIP

func GetLocalTunIP(tunName string) (net.IP, net.IP, error)

func GetManifest

func GetManifest(httpCli *http.Client, os string, arch string) (version string, commit string, url string, err error)

func GetPodCIDRFromCNI added in v2.2.5

func GetPodCIDRFromCNI(ctx context.Context, clientset *kubernetes.Clientset, restclient *rest.RESTClient, restconfig *rest.Config, namespace string) ([]*net.IPNet, error)

GetPodCIDRFromCNI

*

{
  "name": "cni0",
  "cniVersion":"0.3.1",
  "plugins":[
    {
      "datastore_type": "kubernetes",
      "nodename": "10.56.95.185",
      "type": "calico",
      "log_level": "info",
      "log_file_path": "/var/log/calico/cni/cni.log",
      "ipam": {
        "type": "calico-ipam",
        "assign_ipv4": "true",
        "ipv4_pools": ["10.233.64.0/18"]
      },
      "policy": {
        "type": "k8s"
      },
      "kubernetes": {
        "kubeconfig": "/etc/cni/net.d/calico-kubeconfig"
      }
    },
    {
      "type":"portmap",
      "capabilities": {
        "portMappings": true
      }
    }
  ]
}

func GetPodCIDRFromPod added in v2.2.5

func GetPodCIDRFromPod(ctx context.Context, clientset *kubernetes.Clientset, namespace string, svc *net.IPNet) ([]*net.IPNet, error)

func GetPodTemplateSpecPath

func GetPodTemplateSpecPath(u *unstructured.Unstructured) (*v1.PodTemplateSpec, []string, error)

func GetRunningPodList added in v2.2.5

func GetRunningPodList(ctx context.Context, clientset *kubernetes.Clientset, ns string, labelSelector string) ([]corev1.Pod, error)

func GetServiceCIDRByCreateService added in v2.2.5

func GetServiceCIDRByCreateService(ctx context.Context, serviceInterface corev1.ServiceInterface) (*net.IPNet, error)

func GetTlsDomain

func GetTlsDomain(namespace string) string

func GetTopOwnerReference

func GetTopOwnerReference(factory util.Factory, namespace, workload string) (*resource.Info, error)

func GetTopOwnerReferenceBySelector

func GetTopOwnerReferenceBySelector(factory util.Factory, namespace, selector string) (sets.Set[string], error)

GetTopOwnerReferenceBySelector assume pods, controller has same labels

func GetTunDevice

func GetTunDevice(ips ...net.IP) (*net.Interface, error)

func GetTunDeviceByConn

func GetTunDeviceByConn(tun net.Conn) (*net.Interface, error)

func GetUnstructuredObject

func GetUnstructuredObject(f util.Factory, namespace string, workloads string) (*resource.Info, error)

func GetUnstructuredObjectBySelector

func GetUnstructuredObjectBySelector(f util.Factory, namespace string, selector string) ([]*resource.Info, error)

func GetUnstructuredObjectList

func GetUnstructuredObjectList(f util.Factory, namespace string, workloads []string) ([]*resource.Info, error)

func GetVolume added in v2.2.5

func GetVolume(ctx context.Context, f util.Factory, ns, podName string) (map[string][]mount.Mount, error)

GetVolume key format: [container name]-[volume mount name]

func Heartbeats

func Heartbeats()

func InitFactory added in v2.2.5

func InitFactory(kubeconfigBytes string, ns string) cmdutil.Factory

func InitFactoryByPath added in v2.2.5

func InitFactoryByPath(kubeconfig string, ns string) cmdutil.Factory

func InitLogger

func InitLogger(debug bool)

func InitLoggerForServer added in v2.2.2

func InitLoggerForServer(debug bool)

func IsAdmin

func IsAdmin() bool

func IsIPv4

func IsIPv4(packet []byte) bool

func IsIPv6

func IsIPv6(packet []byte) bool

func IsPortListening

func IsPortListening(port int) bool

func IsSameCluster

func IsSameCluster(client v12.ConfigMapInterface, namespace string, clientB v12.ConfigMapInterface, namespaceB string) (bool, error)

func IsWindows

func IsWindows() bool

func Merge

func Merge[K comparable, V any](fromMap, ToMap map[K]V) map[K]V

func MoveToTemp

func MoveToTemp()

func ParseCIDRFromString added in v2.2.5

func ParseCIDRFromString(content string) (result []*net.IPNet)

ParseCIDRFromString

* kube-apiserver: --service-cluster-ip-range=<IPv4 CIDR>,<IPv6 CIDR> kube-controller-manager: --cluster-cidr=<IPv4 CIDR>,<IPv6 CIDR> --service-cluster-ip-range=<IPv4 CIDR>,<IPv6 CIDR> --node-cidr-mask-size-ipv4|--node-cidr-mask-size-ipv6 defaults to /24 for IPv4 and /64 for IPv6 kube-proxy: --cluster-cidr=<IPv4 CIDR>,<IPv6 CIDR>

func ParsePort added in v2.2.3

func ParsePort(str string) v1.ContainerPort

ParsePort tcp/udp/remote:local

func Ping

func Ping(ctx context.Context, targetIP string) (bool, error)

func PortForwardPod

func PortForwardPod(config *rest.Config, clientset *rest.RESTClient, podName, namespace string, portPair []string, readyChan chan struct{}, stopChan <-chan struct{}) error

func PortMapUntil added in v2.2.2

func PortMapUntil(ctx context.Context, conf *SshConfig, remote, local netip.AddrPort) error

func Print

func Print(writer io.Writer, slogan string)

func PrintStatus

func PrintStatus(pod *corev1.Pod, writer io.Writer)

func PrintStatusInline

func PrintStatusInline(pod *corev1.Pod) string

func PullImage

func PullImage(ctx context.Context, platform *v1.Platform, cli *client.Client, c *command.DockerCli, img string, out io.Writer) error

PullImage image.RunPull(ctx, c, image.PullOptions{})

func RemoteRun

func RemoteRun(client *ssh.Client, cmd string, env map[string]string) (output []byte, errOut []byte, err error)

func RemoveDir added in v2.2.5

func RemoveDir(volume map[string][]mount.Mount) error

func Rollback added in v2.2.5

func Rollback(f util.Factory, ns, workload string)

func RolloutStatus

func RolloutStatus(ctx1 context.Context, factory cmdutil.Factory, namespace, workloads string, timeout time.Duration) (err error)

func RunCmd

func RunCmd(exe string, args []string) error

func RunCmdWithElevated

func RunCmdWithElevated(exe string, args []string) error

func RunWithElevated

func RunWithElevated()

func RunWithRollingOutWithChecker

func RunWithRollingOutWithChecker(cmd *osexec.Cmd, checker func(log string)) (string, string, error)

func RunningInContainer

func RunningInContainer() bool

RunningInContainer returns true if the current process runs from inside a docker container.

func SCPAndExec added in v2.2.2

func SCPAndExec(stdout, stderr io.Writer, client *ssh.Client, filename, to string, commands ...string) error

SCPAndExec copy file to remote and exec command

func Shell

func Shell(ctx context.Context, clientset *kubernetes.Clientset, restclient *rest.RESTClient, config *rest.Config, podName, containerName, namespace string, cmd []string) (string, error)

func SshJump added in v2.2.3

func SshJump(ctx context.Context, conf *SshConfig, flags *pflag.FlagSet, print bool) (path string, err error)

func SshJumpAndSetEnv added in v2.2.3

func SshJumpAndSetEnv(ctx context.Context, conf *SshConfig, flags *pflag.FlagSet, print bool) error

func StartupPProf

func StartupPProf(port int)

func TransferImage

func TransferImage(ctx context.Context, conf *SshConfig, imageSource, imageTarget string, out io.Writer) error

TransferImage 1) if not special ssh config, just pull image and tag and push 2) if special ssh config, pull image, tag image, save image and scp image to remote, load image and push

func UnzipKubeVPNIntoFile

func UnzipKubeVPNIntoFile(zipFile, filename string) error

func UpdateImage added in v2.2.5

func UpdateImage(ctx context.Context, factory util.Factory, ns string, deployName string, image string) error

UpdateImage update to newer image

func WaitPod

func WaitPod(ctx context.Context, podInterface v12.PodInterface, list v1.ListOptions, checker func(*corev1.Pod) bool) error

func WaitPodToBeReady

func WaitPodToBeReady(ctx context.Context, podInterface v12.PodInterface, selector v1.LabelSelector) error

func WaitPortToBeFree

func WaitPortToBeFree(ctx context.Context, port int) error

Types

type AssetsEntity

type AssetsEntity struct {
	Url                string         `json:"url"`
	Id                 int64          `json:"id"`
	NodeId             string         `json:"node_id"`
	Name               string         `json:"name"`
	Label              string         `json:"label"`
	Uploader           UploaderEntity `json:"uploader"`
	ContentType        string         `json:"content_type"`
	State              string         `json:"state"`
	Size               int64          `json:"size"`
	DownloadCount      int64          `json:"download_count"`
	CreatedAt          string         `json:"created_at"`
	UpdatedAt          string         `json:"updated_at"`
	BrowserDownloadUrl string         `json:"browser_download_url"`
}

type AuthorEntity

type AuthorEntity struct {
	Login             string `json:"login"`
	Id                int64  `json:"id"`
	NodeId            string `json:"node_id"`
	AvatarUrl         string `json:"avatar_url"`
	GravatarId        string `json:"gravatar_id"`
	Url               string `json:"url"`
	HtmlUrl           string `json:"html_url"`
	FollowersUrl      string `json:"followers_url"`
	FollowingUrl      string `json:"following_url"`
	GistsUrl          string `json:"gists_url"`
	StarredUrl        string `json:"starred_url"`
	SubscriptionsUrl  string `json:"subscriptions_url"`
	OrganizationsUrl  string `json:"organizations_url"`
	ReposUrl          string `json:"repos_url"`
	EventsUrl         string `json:"events_url"`
	ReceivedEventsUrl string `json:"received_events_url"`
	Type              string `json:"type"`
	SiteAdmin         bool   `json:"site_admin"`
}

type ForwardedPort

type ForwardedPort struct {
	Local  uint16
	Remote uint16
}

ForwardedPort contains a Local:Remote port pairing.

type Krb5ClientState

type Krb5ClientState int
const (
	ContextFlagREADY = 128
	/* initiator states */
	InitiatorStart Krb5ClientState = iota
	InitiatorRestart
	InitiatorWaitForMutal
	InitiatorReady
)

type Krb5InitiatorClient

type Krb5InitiatorClient struct {
	// contains filtered or unexported fields
}

func NewKrb5InitiatorClientWithCache

func NewKrb5InitiatorClientWithCache(krb5Conf, cacheFile string) (kcl Krb5InitiatorClient, err error)

func NewKrb5InitiatorClientWithKeytab

func NewKrb5InitiatorClientWithKeytab(username string, krb5Conf, keytabConf string) (kcl Krb5InitiatorClient, err error)

func NewKrb5InitiatorClientWithPassword

func NewKrb5InitiatorClientWithPassword(username, password, krb5Conf string) (kcl Krb5InitiatorClient, err error)

func (*Krb5InitiatorClient) DeleteSecContext

func (k *Krb5InitiatorClient) DeleteSecContext() error

func (*Krb5InitiatorClient) GetMIC

func (k *Krb5InitiatorClient) GetMIC(micFiled []byte) ([]byte, error)

func (*Krb5InitiatorClient) InitSecContext

func (k *Krb5InitiatorClient) InitSecContext(target string, token []byte, isGSSDelegCreds bool) ([]byte, bool, error)

type PodRouteConfig

type PodRouteConfig struct {
	LocalTunIPv4 string
	LocalTunIPv6 string
}

type PortForwarder

type PortForwarder struct {
	Ready chan struct{}
	// contains filtered or unexported fields
}

PortForwarder knows how to listen for local connections and forward them to a remote pod via an upgraded HTTP request.

func NewOnAddresses

func NewOnAddresses(dialer httpstream.Dialer, addresses []string, ports []string, stopChan <-chan struct{}, readyChan chan struct{}, out, errOut io.Writer) (*PortForwarder, error)

NewOnAddresses creates a new PortForwarder with custom listen addresses.

func (*PortForwarder) Close

func (pf *PortForwarder) Close()

Close stops all listeners of PortForwarder.

func (*PortForwarder) ForwardPorts

func (pf *PortForwarder) ForwardPorts() error

ForwardPorts formats and executes a port forwarding request. The connection will remain open until stopChan is closed.

func (*PortForwarder) GetPorts

func (pf *PortForwarder) GetPorts() ([]ForwardedPort, error)

GetPorts will return the ports that were forwarded; this can be used to retrieve the locally-bound port in cases where the input was port 0. This function will signal an error if the Ready channel is nil or if the listeners are not ready yet; this function will succeed after the Ready channel has been closed.

type ReactionsEntity

type ReactionsEntity struct {
	Url        string `json:"url"`
	TotalCount int64  `json:"total_count"`
	Normal1    int64  `json:"+1"`
	Normal11   int64  `json:"-1"`
	Laugh      int64  `json:"laugh"`
	Hooray     int64  `json:"hooray"`
	Confused   int64  `json:"confused"`
	Heart      int64  `json:"heart"`
	Rocket     int64  `json:"rocket"`
	Eyes       int64  `json:"eyes"`
}

type RootEntity

type RootEntity struct {
	Url             string          `json:"url"`
	AssetsUrl       string          `json:"assets_url"`
	UploadUrl       string          `json:"upload_url"`
	HtmlUrl         string          `json:"html_url"`
	Id              int64           `json:"id"`
	NodeId          string          `json:"node_id"`
	TagName         string          `json:"tag_name"`
	TargetCommitish string          `json:"target_commitish"`
	Name            string          `json:"name"`
	Draft           bool            `json:"draft"`
	Prerelease      bool            `json:"prerelease"`
	CreatedAt       string          `json:"created_at"`
	PublishedAt     string          `json:"published_at"`
	Assets          []AssetsEntity  `json:"assets"`
	TarballUrl      string          `json:"tarball_url"`
	ZipballUrl      string          `json:"zipball_url"`
	Body            string          `json:"body"`
	Reactions       ReactionsEntity `json:"reactions"`
}

type SshConfig

type SshConfig struct {
	Addr             string
	User             string
	Password         string
	Keyfile          string
	ConfigAlias      string
	RemoteKubeconfig string
	// GSSAPI
	GSSAPIKeytabConf string
	GSSAPIPassword   string
	GSSAPICacheFile  string
}

func ParseSshFromRPC

func ParseSshFromRPC(sshJump *rpc.SshJump) *SshConfig

func (*SshConfig) ToRPC

func (s *SshConfig) ToRPC() *rpc.SshJump

type UploaderEntity

type UploaderEntity struct {
	Login             string `json:"login"`
	Id                int64  `json:"id"`
	NodeId            string `json:"node_id"`
	AvatarUrl         string `json:"avatar_url"`
	GravatarId        string `json:"gravatar_id"`
	Url               string `json:"url"`
	HtmlUrl           string `json:"html_url"`
	FollowersUrl      string `json:"followers_url"`
	FollowingUrl      string `json:"following_url"`
	GistsUrl          string `json:"gists_url"`
	StarredUrl        string `json:"starred_url"`
	SubscriptionsUrl  string `json:"subscriptions_url"`
	OrganizationsUrl  string `json:"organizations_url"`
	ReposUrl          string `json:"repos_url"`
	EventsUrl         string `json:"events_url"`
	ReceivedEventsUrl string `json:"received_events_url"`
	Type              string `json:"type"`
	SiteAdmin         bool   `json:"site_admin"`
}

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL