Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker 如何知道pod内Loadbalancer服务的外部端点或ip_Docker_Kubernetes_Google Cloud Platform - Fatal编程技术网

Docker 如何知道pod内Loadbalancer服务的外部端点或ip

Docker 如何知道pod内Loadbalancer服务的外部端点或ip,docker,kubernetes,google-cloud-platform,Docker,Kubernetes,Google Cloud Platform,我有一个helm图表,可以安装/创建我们应用程序的实例。我们的应用程序由多个微服务组成,其中一个是nginx。nginx服务属于loadbalancer类型 因此,当用户第一次尝试从浏览器点击loadbalancer IP时,我想打开一个网页,要求他将一些域(例如a.yourdomain.com和b.yourdomain.com)与loadbalancer IP绑定,一旦他这样做,他将单击verify按钮,此时我想在服务器端检查域是否正确指向loadbalancer IP 现在的问题是如何在ng

我有一个helm图表,可以安装/创建我们应用程序的实例。我们的应用程序由多个微服务组成,其中一个是nginx。nginx服务属于loadbalancer类型

因此,当用户第一次尝试从浏览器点击loadbalancer IP时,我想打开一个网页,要求他将一些域(例如a.yourdomain.com和b.yourdomain.com)与loadbalancer IP绑定,一旦他这样做,他将单击verify按钮,此时我想在服务器端检查域是否正确指向loadbalancer IP

现在的问题是如何在nginx pod中获取loadbalancer外部IP,以便ping这些域并检查它们是否指向loadbalancer IP

编辑


注意:我希望避免使用kubectl,因为我不想为一次性作业安装此额外实用程序。

外部IP的值将处于服务对象的状态


kubectl get svc$svc_NAME-n$NS_NAME-o jsonpath={.status.loadBalancer.ingres[*].ip}”将获取外部ip

我找到了解决方案,诀窍是使用k8s种子设定的默认令牌调用k8s api服务器。这两个简单的命令将实现以下目的:

KUBE_TOKEN=$(cat /var/run/secrets/kubernetes.io/serviceaccount/token)

curl -sSk -H "Authorization: Bearer $KUBE_TOKEN" \ 
https://$KUBERNETES_SERVICE_HOST:$KUBERNETES_PORT_443_TCP_PORT/api/v1/namespaces/<your_namespace>/services/nginx \ 
| jq -r '.status.loadBalancer.ingress[0].ip'

我已经找到了一个解决方案,经过测试,它正在工作

要查找与LoadBalancer类型的nginx服务关联的ExternalIP,请创建服务帐户:

kubectl create serviceaccount hello
并创建角色和角色索引,如下所示:

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: read-services
rules:
- apiGroups: [""]
  resources: ["services"]
  verbs: ["get", "watch", "list"]

---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: read-services
  namespace: default
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: read-services
subjects:
- kind: ServiceAccount
  name: hello
  namespace: default
然后使用servicecomport:hello创建pod

现在您可以向api服务器发出curl请求:

在.status.loadBalancer.ingress[0]下,ip应该是您要查找的ip


如果有帮助,请告诉我。

谢谢@Suresh的回复。为此,我必须在nginx吊舱中安装kubectl。我想避免这种情况。还有其他方法吗?kubernetes seeds的默认服务帐户也可以使用。
APISERVER=https://kubernetes.default.svc
SERVICEACCOUNT=/var/run/secrets/kubernetes.io/serviceaccount
NAMESPACE=$(cat ${SERVICEACCOUNT}/namespace)
TOKEN=$(cat ${SERVICEACCOUNT}/token)
CACERT=${SERVICEACCOUNT}/ca.crt

curl --cacert ${CACERT} --header "Authorization: Bearer ${TOKEN}" -X GET ${APISERVER}/api/v1/namespaces/$NAMESPACE/services/nginx/