গো কোড ব্যবহার করে কোনও পডের ভেতর থেকে এপিআই অ্যাক্সেস করার চেষ্টা করার সময় আমি এই সমস্যার মধ্যে পড়েছিলাম। নীচে আমি সেই কাজটি করার জন্য যা বাস্তবায়িত করেছি তা যদি কেউ এই প্রশ্নটিও আসে যে গো ব্যবহার করতে চাইছে across
উদাহরণটিতে একটি পড সংস্থান ব্যবহার করা হয়েছে, যার জন্য আপনি client-go
যদি দেশীয় কুবেরনেটসের সাথে কাজ করে থাকেন তবে আপনার গ্রন্থাগারটি ব্যবহার করা উচিত । এই কোডটি কাস্টম রিসোর্সস ডেফিনেশনগুলির সাথে কাজ করে তাদের জন্য আরও সহায়ক।
serviceHost := os.GetEnv("KUBERNETES_SERVICE_HOST")
servicePort := os.GetEnv("KUBERNETES_SERVICE_PORT")
apiVersion := "v1" // For example
namespace := default // For example
resource := "pod" // For example
httpMethod := http.MethodGet // For Example
url := fmt.Sprintf("https://%s:%s/apis/%s/namespaces/%s/%s", serviceHost, servicePort, apiVersion, namespace, resource)
u, err := url.Parse(url)
if err != nil {
panic(err)
}
req, err := http.NewRequest(httpMethod, u.String(), bytes.NewBuffer(payload))
if err != nil {
return err
}
caToken, err := ioutil.ReadFile("/var/run/secrets/kubernetes.io/serviceaccount/token")
if err != nil {
panic(err) // cannot find token file
}
req.Header.Set("Content-Type", "application/json")
req.Header.Set("Authorization", fmt.Sprintf("Bearer %s", string(caToken)))
caCertPool := x509.NewCertPool()
caCert, err := ioutil.ReadFile("/var/run/secrets/kubernetes.io/serviceaccount/ca.crt")
if err != nil {
return panic(err) // Can't find cert file
}
caCertPool.AppendCertsFromPEM(caCert)
client := &http.Client{
Transport: &http.Transport{
TLSClientConfig: &tls.Config{
RootCAs: caCertPool,
},
},
}
resp, err := client.Do(req)
if err != nil {
log.Printf("sending helm deploy payload failed: %s", err.Error())
return err
}
defer resp.Body.Close()
// Check resp.StatusCode
// Check resp.Status