是否有可能以某种方式向外界公开 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 中运行它,但是为了快速开发,为了测试诸如连接性之类的小事情,似乎不得不经历这个过程似乎很乏味?
不知何故,我可以公开服务,从而在其选择器中访问应用程序?
最佳答案
为了将您的 Kubernetes 服务公开到 Internet,您必须更改 ServiceType
.
您的服务使用默认值 ClusterIP
,它将服务暴露在集群内部 IP 上,使其成为 只能在集群内访问 .
1 - 如果您使用 AWS 或 GCP 等云服务提供商,您最好的选择是使用 LoadBalancer
服务类型:它使用提供程序负载均衡器自动向 Internet 公开。
跑:
kubectl expose deployment deployment-name --type=LoadBalancer --name=service-name
在哪里 deployment-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
2 - 如果您在本地运行 Kubernetes(如 Minikube),最好的选择是
Nodeport
服务类型 :它将服务暴露给集群节点(主机)。
对于测试目的,这比将服务暴露给整个互联网更安全。
运行:
kubectl expose deployment deployment-name --type=NodePort --name=service-name
在哪里
deployment-name
必须替换为您的实际部署名称。所需的 service-name
也是如此下面是我将 Nginx 网络服务器暴露给
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:~$
关于api - 为开发目的在集群外公开 Kubernetes 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59640608/