[英]Kubernetes - Expose Website using nginx-ingress
我有一个在 kubernetes 集群中运行的网站。 我可以在本地访问它,但希望通过 Internet 访问它。 (我有注册域名),但是外部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-controller,但在那之后Kubectl 获取nginx 控制器的所有外部 IP 保持挂起。
EXTERNAL-IP
预计在 minikube 等非云环境中待定。 您应该能够使用curl www.carina.bernrieder.de
访问该应用程序
下面是指南上使用nginx的入口暴露于minikube的应用
正如@Arghya Sadhu 提到的,在当地环境中,这是预期的行为。 当您更深入地了解它在云环境中的工作方式时,也许会更容易理解。 无需赘述,如果您在GKE 、 EKS或AKS上应用Ingress
资源,则会在“幕后”发生更多事情。 与外部IP负载均衡器会自动创建这样的入口可以使用它的外部流量转发到Pods
部署在kubernetes集群上。
Minikube没有这样的功能,因为它不能调用任何 API 来创建额外的基础设施资源,就像在云环境中发生的那样。
但让我们从头开始。 您在问题中没有提及有关外部 IP 或域配置的任何内容。 如果您没有将域重定向到的外部静态 IP,则无论如何它都无法工作。
关于这一点,我不会完全同意:
您应该能够使用 curl www.carina.bernrieder.de访问该应用程序
是的,只要您在/etc/hosts
文件中添加以下条目,您就可以通过您的域(实际上是通过您甚至不需要拥有的任何域)访问它,这样 DNS 就不会被使用,它会根据这个本地定义的映射来解析:
172.17.0.15 www.carina.bernrieder.de
正如你可以在这里阅读:
注意:如果您在本地运行 Minikube,请使用
minikube ip
获取外部 IP。 入口列表中显示的 IP 地址将是内部 IP。
但请记住,这两个 IP 都将是私有 IP。 在入口列表中显示的一个将是内部集群 ip,而外部一个将仅从您的Minikube集群的角度来看是外部的。 它仍然是分配给Minikube 虚拟机的本地网络中的 IP。
正如您在问题中所说,您希望通过 Internet 提供它。 正如您所看到的,如果没有额外的配置,它就没有机会工作。
另一个重要的事情。 您没有提到Minikube的实际安装位置,所以我猜您是在本地计算机上设置的,而且很可能您在 NAT 路由器后面。 如果这是您的情况,在公共互联网上公开它不会那么容易。 您需要在路由器上配置适当的端口转发规则,当然您需要一个静态 IP 或者您需要配置动态 DNS 以便能够通过您的动态公共 IP 访问 Internet 上的计算机。
Minikube主要是为在本地使用 kubernetes 而设计的,而不是用于生产环境。 当然,您可以使用它来运行您的小型应用程序,但随后您可能会考虑将其安装在云环境中的 VM 或某种 VPS 服务器上。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.