使用Docker在Minikube上部署Nginx容器并公开

首先

经过很长时间的思考,我一直在考虑如何在为学习而建立的Kubernetes环境中公开Service。这次通过学习路由表,我成功搭建了Nginx容器,并使其能够访问Minikube内的POD,所以我决定写一篇文章。

构建的结构 de

image.png

我正在使用Docker运行Minikube。我在Minikube外部搭建了一个Nginx容器。我将这个Nginx当作负载均衡器,以便可以从外部访问它。
我在以下链接中公开了我创建的Terraform文件。如果方便的话,请查看一下。
https://github.com/kohei39san/mystudy-handson/tree/main/k8s-manifests/make-jmeter-scenario
(在上述文件中,我执行了其他安装命令,因为它是为了使用JMeter而创建的)

参考資料中提到,除了使用Minikube进行公开外,还有以下其他方法可供选择。

    • ノードポートでの公開

 

    • Serviceにてノードポートを指定します。ノードに対して、30000~32767内のポートのいずれかで公開できます。しかし、ポート番号を覚えておく必要があります。また、Minikubeをコンテナで動かしている場合、コンテナのポートの公開になるのでEC2外からアクセスするには別途用意が必要になります。

 

    • Minikubeのtunnel機能での公開

 

    • EC2から内部のk8sネットワークにアクセスできるようになります。

 

    参考:https://qiita.com/inajob/items/4025a1d1aa83721c453d

从Nginx容器到服务的通信方式

启动Minikube后,将创建一个名为”minikube”的Docker网络,在该网络中运行Nginx容器。

这样,Minikube主容器(称为”minikube”容器)和Nginx容器将可以互相通信。

image.png

Minikube容器内具有Kubernetes服务的网络,允许从Minikube容器内访问服务。

因此,我们将在Nginx容器中设置路由,将请求从Nginx容器通过Minikube容器转发到POD。这实质上与使用Minikube隧道进行转发是相同的。请按以下方式在Nginx容器中添加路由。

route add -net 10.96.0.0 netmask 255.240.0.0 gw 192.168.49.2 eth0
image.png

在这里,具有k8s网络的DNS功能的是CoreDNS(kube-dns服务)。
通过将CoreDNS指定为Nginx容器的DNS服务器,可以实现在k8s中的名称解析(可以从Nginx容器访问形式为service.namespace.svc.cluster.local的记录)。

※参考
https://qiita.com/inajob/items/4025a1d1aa83721c453d

请参考以下网址: https://qiita.com/inajob/items/4025a1d1aa83721c453d

通过使用Ingress,可以更改转发目的地的Service。

在使用Nginx容器进行路径穿透时,或许可以更容易地确定通信路径在k8s内部。
举个例子,通过使用Nginx的Ingress Controller,在k8s内部可以启动Nginx POD,并通过Ingress来控制通信路径。

image.png

※ 参考
https://kubernetes.io/ja/docs/concepts/services-networking/ingress/

通过将Nginx容器绑定到EC2的端口上,可以将其公开。

在EC2外部访问Nginx容器的一种方法是使用端口绑定。
https://docs.docker.jp/engine/userguide/networking/default_network/binding.html

如果绑定Nginx容器的80号和443号端口,那么就可以从EC2的80号和443号端口访问k8s内部。我认为,决定公开的端口号相对自由,并且通信路径控制也是在k8s内部决定,这是一个优点。

最后

再次学习网络真是受益良多,真的非常深奥。
我将继续努力学习。

广告
将在 10 秒后关闭
bannerAds