Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/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
Api 出于开发目的在集群外部公开kubernetes服务_Api_Kubernetes_Development Environment - Fatal编程技术网

Api 出于开发目的在集群外部公开kubernetes服务

Api 出于开发目的在集群外部公开kubernetes服务,api,kubernetes,development-environment,Api,Kubernetes,Development Environment,是否有可能向外界公开kubernetes服务? 我目前正在开发一个需要与服务通信的应用程序,为此我需要知道pod ip和端口地址,我使用kubernetes集群可以通过链接到它的kubernetes服务获得这些地址,但在集群之外,我似乎无法找到或公开它们 apiVersion: v1 kind: Service metadata: name: kafka-broker spec: ports: - name: broker port: 9092 protocol: T

是否有可能向外界公开kubernetes服务? 我目前正在开发一个需要与服务通信的应用程序,为此我需要知道pod ip和端口地址,我使用kubernetes集群可以通过链接到它的kubernetes服务获得这些地址,但在集群之外,我似乎无法找到或公开它们

apiVersion: v1
kind: Service
metadata:
  name: kafka-broker
spec:
  ports:
  - name: broker
    port: 9092
    protocol: TCP
    targetPort: kafka
  selector:
    app: kafka
  sessionAffinity: None
  type: ClusterIP
我可以将应用程序容器化,放在一个pod中,然后在kubernetes中运行,但是对于快速开发来说,要测试诸如连接性之类的小事情似乎很繁琐


通过某种方式,我可以公开服务,从而在其选择器中访问应用程序?

使用服务类型作为节点端口或负载平衡器。如果您在Azure、AWS或GCD等云中运行,建议使用后者

请参阅下文

apiVersion: v1
kind: Service
metadata:
  name: kafka-broker
spec:
  ports:
  - name: broker
    port: 9092
    protocol: TCP
    targetPort: kafka
  selector:
    app: kafka
  sessionAffinity: None
  type: NodePort

您可以使用:NodePort或负载平衡器类型的服务,如其他答案中所述。甚至进入

但由于您只是出于开发人员的目的,我建议在给定的名称空间中启动一个测试pod,并检查该pod的连接。您可以获得对运行pod
kubectl exec-it{PODNAME}/bin/sh

您还可以尝试以下工具: - -
-

要将Kubernetes服务公开到internet,必须更改
服务类型

您的服务正在使用默认值,即
ClusterIP
,它在群集内部IP上公开服务,使其只能在群集内访问

1-如果您使用AWS或GCP等云提供商,最好的选择是使用
LoadBalancer
服务类型:
,该服务使用提供商负载均衡器自动向互联网公开

运行:
kubectl公开部署名称--type=LoadBalancer--name=service name

其中
部署名称
必须替换为您的实际部署名称。对于所需的
服务名称

稍等几分钟,kubectl get svc
命令将为您提供外部IP和端口:

owilliam@minikube:~$ kubectl get svc
NAME               TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)      AGE
kubernetes         ClusterIP      10.96.0.1       <none>        443/TCP      4d21h
nginx-service-lb   LoadBalancer   10.96.125.208   0.0.0.0     80:30081/TCP   36m

您可以使用节点端口公开主机上的端口。参考此。如何访问它?使用主机名:NODEPORT
user@minikube:~$ kubectl get svc
NAME           TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)        AGE
kubernetes     ClusterIP   10.96.0.1     <none>        443/TCP        4d21h
service-name   NodePort    10.96.33.84   <none>        80:31198/TCP   4s

user@minikube:~$ minikube service list
|----------------------|---------------------------|-----------------------------|-----|
|      NAMESPACE       |           NAME            |         TARGET PORT         | URL |
|----------------------|---------------------------|-----------------------------|-----|
| default              | kubernetes                | No node port                |
| default              | service-name              | http://192.168.39.181:31198 |
| kube-system          | kube-dns                  | No node port                |
| kubernetes-dashboard | dashboard-metrics-scraper | No node port                |
| kubernetes-dashboard | kubernetes-dashboard      | No node port                |
|----------------------|---------------------------|-----------------------------|-----|
user@minikube:~$ curl http://192.168.39.181:31198 
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
...//// suppressed output
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
user@minikube:~$