我有一个在kubernetes集群中运行的网站。我可以在本地访问它,但想让它在互联网上可用。(我已经注册了域名),但外部IP一直挂起
我使用的是这个指令:https://dev.to/peterj/expose-a-kubernetes-service-on-your-own-custom-domain-52dd
这是服务和入口的代码
kind: Service
apiVersion: v1
metadata:
name: app-service
spec:
selector:
app: website
ports:
- name: http
protocol: TCP
port: 3000
targetPort: 3000
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: app-ingress
annotations:
kubernetes.io/ingress.class: nginx
spec:
rules:
- host: www.carina.bernrieder.de
http:
paths:
- path: /
backend:
serviceName: app-service
servicePort: 3000所以我使用helm来安装nginx - Kubectl get all,但是在那之后nginx控制器的外部IP保持挂起状态。
发布于 2020-10-15 20:20:58
EXTERNAL-IP预计将在非云环境中挂起,例如minikube。您应该能够使用curl www.carina.bernrieder.de访问应用程序
下面是使用nginx入口在minikube上公开应用程序的guide
发布于 2020-10-16 04:06:09
正如@Arghya Sadhu提到的,在当地环境中,这是预期的行为。也许当你更深入地了解它在云环境中的工作方式时,它会更容易理解。不深入细节,如果你在GKE,EKS或AKS上应用Ingress资源,更多的事情发生在“引擎盖下”。自动创建具有外部IP的负载均衡器,以便您的入口可以使用它将外部流量转发到您的kubernetes集群上部署的Pods。
Minikube没有这样的功能,因为它不能调用任何API来创建额外的基础设施资源,就像在云环境中发生的那样。
但让我们从头开始。您在问题中没有提到任何有关您的外部IP或域配置的内容。如果你的域名没有被重定向到的外部静态IP,那么它无论如何都没有机会工作。
关于这一点,我不完全同意:
您应该能够使用curl www.carina.bernrieder.de访问应用程序
可以,您可以通过您的域(实际上是通过您甚至不需要拥有的任何域)访问它,前提是您在/etc/hosts文件中添加了以下条目,这样就不会使用DNS,它将根据此本地定义的映射进行解析:
172.17.0.15 www.carina.bernrieder.de正如您可以阅读here
注意:如果您在本地运行Minikube,请使用
minikube ip获取外部IP。入口列表中显示的IP地址将是内部IP。
但请记住,这两个in都是内网in。入口列表中显示的是内部群集ip,而外部群集仅从Minikube群集的角度来看是外部群集ip。它仍然是本地网络中分配给Minikube vm的IP。
正如你在你的问题中所说的,你想在互联网上提供它。正如你所看到的,如果没有额外的配置,它是没有机会工作的。
另一件重要的事情。你没有提到你的Minikube的实际安装位置,所以我猜你是在你的本地计算机上设置的,很可能你在NAT路由器后面。如果这是你的案例,那么在公共互联网上曝光就不那么容易了。您需要在您的路由器上配置适当的端口转发规则,当然,您还需要一个静态IP,或者您需要配置动态DNS,以便能够通过dynami公共IP访问Internet上的计算机。
kubernetes Minikube主要是为在本地使用kubernetes而不是为生产环境而设计的。当然,您可以使用它来运行您的小应用程序,但然后您可能会考虑将其安装在云环境中的VM或某种VPS服务器上。
https://stackoverflow.com/questions/64370784
复制相似问题