in pkg/mesh/krun.go [277:375]
func (kr *KRun) initFromEnv() {
mesh := kr.Config("MESH", "")
if mesh != "" {
meshURL, err := url.Parse(mesh)
if err != nil {
log.Println("Ignoring invalid meshURL", mesh, err)
}
kr.MeshAddr = meshURL
}
// TODO: if meshURL is set and is file:// or gke:// - use it directly
if kr.KSA == "" {
// Same environment used for VMs
kr.KSA = os.Getenv("WORKLOAD_SERVICE_ACCOUNT")
}
// TODO: on GKE detect KSA from the JWT or workload cert.
// Same for trust domain if workload certs are enabled
if kr.KSA == "" {
kr.KSA = "default"
}
if kr.Namespace == "" {
// Same environment used for VMs
kr.Namespace = os.Getenv("WORKLOAD_NAMESPACE")
}
// TODO: detect the namespace from the JWT token if on GKE
if kr.Name == "" {
kr.Name = os.Getenv("WORKLOAD_NAME")
}
if kr.Gateway == "" {
kr.Gateway = os.Getenv("GATEWAY_NAME")
}
if kr.MeshTenant == "" {
kr.MeshTenant = os.Getenv("MESH_TENANT")
}
ks := os.Getenv("K_SERVICE")
if kr.Name == "" {
verNsName := strings.SplitN(ks, "--", 2)
if len(verNsName) > 1 {
ks = verNsName[1]
kr.Labels["ver"] = verNsName[0]
} else {
kr.Name = ks
}
}
kr.Aud2File = map[string]string{}
prefix := "."
if os.Getuid() == 0 {
prefix = ""
}
if kr.BaseDir == "" {
kr.BaseDir = os.Getenv("MESH_BASE_DIR")
}
if kr.BaseDir != "" {
prefix = kr.BaseDir
} else {
kr.BaseDir = prefix
}
if kr.TrustDomain == "" {
kr.TrustDomain = os.Getenv("TRUST_DOMAIN")
}
// This can be used to provide a k8s-like environment, for apps that need it.
// It might be better to just generate a kubeconfig file and not pretend we are inside a cluster.
//if !kr.InCluster {
// kr.Aud2File["api"] = prefix + "/var/run/secrets/kubernetes.io/serviceaccount/token"
//}
// TODO: stop using this, use ProxyConfig.DiscoveryAddress instead
if kr.XDSAddr == "" {
kr.XDSAddr = os.Getenv("XDS_ADDR")
}
pc := os.Getenv("PROXY_CONFIG")
if pc != "" {
err := yaml.Unmarshal([]byte(pc), &kr.ProxyConfig)
if err != nil {
log.Println("Invalid ProxyConfig, ignoring", err)
}
if kr.ProxyConfig.DiscoveryAddress != "" {
kr.XDSAddr = kr.ProxyConfig.DiscoveryAddress
}
}
// Advanced options
// example dns:debug
kr.AgentDebug = kr.Config("XDS_AGENT_DEBUG", "")
for _, e := range os.Environ() {
k := strings.SplitN(e, "=", 2)
if len(k) == 2 && strings.HasPrefix(k[0], "PORT_") && len(k[0]) > 5 {
kr.MeshEnv[k[0]] = k[1]
}
}
}