如何在内部调用Kubernetes REST服务?

wrrgggsh  于 2023-06-21  发布在  Kubernetes
关注(0)|答案(1)|浏览(129)

我试图在Kubernetes环境中调度cron作业,并且我希望在内部访问服务,而不是通过集群外部的负载均衡器。下面是我在YAML中定义的服务的一个例子:

---
apiVersion: v1
kind: Service
metadata:
  name: stage-api-svc
  labels:
    run: stage-api
  annotations:
    service.beta.kubernetes.io/do-loadbalancer-protocol: "http"
    service.beta.kubernetes.io/do-loadbalancer-redirect-http-to-https: "true"
    service.beta.kubernetes.io/do-loadbalancer-tls-ports: "443"
    service.beta.kubernetes.io/do-loadbalancer-sticky-sessions-cookie-name: "stage-cloud"
    service.beta.kubernetes.io/do-loadbalancer-sticky-sessions-cookie-ttl: "380"
    service.beta.kubernetes.io/do-loadbalancer-healthcheck-path: "/status"
spec:
  selector:
    special: stage-api-svc
  type: LoadBalancer
  ports:
    - name: http
      port: 443
      targetPort: 8443

我在其他类似问题的评论中读到,我可以使用special选择器来引用该服务。在我的情况下,我会打电话:

curl -H "InternalUser: true" -X GET "http://stage-api-svc:8443/cron"

但是,这似乎不起作用,所以我想知道是否在服务定义中使用了正确的选择器值来引用它。

zkure5ic

zkure5ic1#

如果您尝试访问k8s集群中的服务,则应使用use service port 443而不是8443。还要确保:

  • 服务的targetPort正确Map到Pod的容器端口
  • Service和Pod位于同一命名空间中。如果它们在不同的NS中,请在url中提到它,如http://stage-api-svc.namespace-name:443/cron
  • Service中使用的selectorLabels正确指向Pod的标签。

相关问题