api - 为开发目的在集群外公开 Kubernetes 服务

标签 api kubernetes development-environment

是否有可能以某种方式向外界公开 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/

相关文章:

java - Android Studio - 未安装 HAX 内核模块

c++ - 如何更改 Win32 API 应用程序中的控件主题?

ssl - 如何使用来自工作节点的证书以用户身份运行远程代码

api - REST GET 请求、动词和 apikey

kubernetes - 如何在 Kubernetes(带有 docker 容器)内运行 echo 服务器以与本地环境中的其他计算机进行通信?

ubuntu - microk8s + 入口 : ingressed service always resolves to 127. 0.0.1 而不是 pod ip

visual-studio-2010 - 有没有办法更改 Roslyn CTP 中 C# 交互窗口的字体和颜色?

css - Chrome Dev Tools 声称样式会覆盖自己

python - 使用 API 请求在盈透证券下订单

java - 如何理解和实现 Twitter API 制作 Android Twitter 客户端