Kubernetes / Metallb 单入口点
Kubernetes / Metallb single entrypoint
我正在为学校项目构建 K8 集群。
它是裸机,使用 metallb 作为负载均衡器。
每个服务都在一个单独的 pod 中工作:
- Nginx
- WordPress
- phpmyadmin
- Mysql (mariadb)
在 phpmyadmin 文件中,我需要 link 我的 mysql 服务器用这样的东西:
$cfg['Servers'][$i]['host'] = "mysql-server-name";
我试过使用节点的IP:
kubectl get node -o=custom-columns='DATA:status.addresses[0].address' | sed -n 2p
添加端口 :3306 但我意识到 none 我的服务可以使用这种方法通过浏览器访问。
例如,节点的 Ip:5050 应该将我重定向到我的 wordpress,但它没有。
有没有办法获得一个 IP,我可以用它来让我的 pods 在它们之间进行通信?
我必须补充一点,当我使用 svc IP 而不是节点时,每个服务都可以正常工作。
这是我用于 metallb 的配置图:
kind: ConfigMap
metadata:
namespace: metallb-system
name: config
data:
config: |
address-pools:
- name: default
protocol: layer2
addresses:
- 192.168.99.100-192.168.99.200
节点 IP 不会将您的应用程序暴露给其他应用程序的原因是 kubernetes 集群中的 pods 默认情况下不监听到达节点的请求。换句话说,pod上的端口没有连接到节点上的端口。
service
资源是建立连接所需的资源。
服务有不同的类型。 cluster IP
类型的服务会将集群内部的 IP 分配给应用程序。如果您不想直接从 Internet 访问您的 mysql 数据库,这就是您想要的。
这是您项目的集群 IP 类型的示例服务。
apiVersion: v1
kind: Service
metadata:
name: mysql-service
namespace: metallb-system
spec:
selector:
app: Mysql
ports:
- protocol: TCP
port: 80
targetPort: 3306
Selector
选择带有标签 app=mysql
.
的 pods
Port
是服务将监听的端口。
TargetPort
是 mysql 正在监听的端口。
当你创建服务时,你可以通过运行这个命令
找到它的IP
kubectl get services -n metallb-system
在 CLUSTER-IP 列下,记下您创建的服务的 IP。
所以在这种情况下,如果 mysql 正在监听 3306,您可以通过此服务在端口 80 上的服务 IP 上访问它。
如果您想将您的 wordpress 应用程序公开到互联网,请使用 NodePort
或 LoadBalancer
服务类型。 Here为服务类型参考。
我正在为学校项目构建 K8 集群。 它是裸机,使用 metallb 作为负载均衡器。 每个服务都在一个单独的 pod 中工作:
- Nginx
- WordPress
- phpmyadmin
- Mysql (mariadb)
在 phpmyadmin 文件中,我需要 link 我的 mysql 服务器用这样的东西:
$cfg['Servers'][$i]['host'] = "mysql-server-name";
我试过使用节点的IP:
kubectl get node -o=custom-columns='DATA:status.addresses[0].address' | sed -n 2p
添加端口 :3306 但我意识到 none 我的服务可以使用这种方法通过浏览器访问。 例如,节点的 Ip:5050 应该将我重定向到我的 wordpress,但它没有。 有没有办法获得一个 IP,我可以用它来让我的 pods 在它们之间进行通信? 我必须补充一点,当我使用 svc IP 而不是节点时,每个服务都可以正常工作。
这是我用于 metallb 的配置图:
kind: ConfigMap
metadata:
namespace: metallb-system
name: config
data:
config: |
address-pools:
- name: default
protocol: layer2
addresses:
- 192.168.99.100-192.168.99.200
节点 IP 不会将您的应用程序暴露给其他应用程序的原因是 kubernetes 集群中的 pods 默认情况下不监听到达节点的请求。换句话说,pod上的端口没有连接到节点上的端口。
service
资源是建立连接所需的资源。
服务有不同的类型。 cluster IP
类型的服务会将集群内部的 IP 分配给应用程序。如果您不想直接从 Internet 访问您的 mysql 数据库,这就是您想要的。
这是您项目的集群 IP 类型的示例服务。
apiVersion: v1
kind: Service
metadata:
name: mysql-service
namespace: metallb-system
spec:
selector:
app: Mysql
ports:
- protocol: TCP
port: 80
targetPort: 3306
Selector
选择带有标签 app=mysql
.
的 pods
Port
是服务将监听的端口。
TargetPort
是 mysql 正在监听的端口。
当你创建服务时,你可以通过运行这个命令
kubectl get services -n metallb-system
在 CLUSTER-IP 列下,记下您创建的服务的 IP。
所以在这种情况下,如果 mysql 正在监听 3306,您可以通过此服务在端口 80 上的服务 IP 上访问它。
如果您想将您的 wordpress 应用程序公开到互联网,请使用 NodePort
或 LoadBalancer
服务类型。 Here为服务类型参考。