入口mariadb总是返回此站点无法访问



我正在学习使用ingress和MariaDB的Kubernetes。我不知道是哪个使我的代码出错,返回"此站点无法访问"。需求包括Services、ConfigMap和Secret。确保它被Ingress(在/etc/hosts中创建一个简单的本地DNS)暴露,并且可以被Postman/Web浏览器访问(不要端口转发)。所有的CRUD特性(文章)必须包含在视频演示中。

apiVersion: v1
kind: PersistentVolume
metadata:
name: toto-mariadb-volume
spec:
accessModes:
- ReadWriteOnce
capacity:
storage: 5Gi
hostPath:
path: /data
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: toto-mariadb-volume-claim
spec:
accessModes:
- ReadWriteOnce
volumeMode: Filesystem
resources:
requests:
storage: 1Gi
---
apiVersion: v1
kind: Secret
metadata:
name: toto-mariadb-secret
stringData:
MYSQL_DATABASE: toto
MYSQL_PASSWORD: password
MYSQL_ROOT_PASSWORD: P@ssw0rd
MYSQL_USER: toto_user
data:
toto_VERY_SECRET: "a3ViZXJuZXRlcwo="
---
apiVersion: v1
kind: ConfigMap
metadata:
name: toto-mariadb-config
data:
APP_NAME: "toto-mariadb"
APP_PORT: "3306"
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: toto-mariadb
labels:
app: toto-mariadb
spec:
replicas: 1
selector:
matchLabels:
app: toto-mariadb
template:
metadata:
name: toto-mariadb
labels:
app: toto-mariadb
spec:
containers:
- name: toto-mariadb
image: mariadb
resources:
limits:
memory: "1Gi"
cpu: "500m"
ports:
- containerPort: 3306
protocol: TCP
envFrom:
- secretRef:
name: toto-mariadb-secret
- configMapRef:
name: toto-mariadb-config
---
apiVersion: v1
kind: Service
metadata:
name: toto-mariadb-service
spec:
selector:
name: toto-mariadb
ports:
- port: 3306
targetPort: 3306
protocol: TCP
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: toto-mariadb-ingress
labels:
app: toto-mariadb-ingress
spec:
rules:
- host: toto-mariadb.lovanto.local
http:
paths:
- pathType: Prefix
path: "/"
backend:
service:
name: toto-mariadb-service
port: 
number: 3306

使用端口转发时代码正常工作,但当使用主机时仍然不工作

MariaDB不使用HTTP协议是postmanbrowser使用的。入口只与http/https有关。所以对于您的用例,您很可能不需要入口.

有几个简单的方法来处理这个问题。

kubectl port-forward…

如果你只是使用这个乐趣/学习一个快速的方法是使用端口转发使用kubectl例如:

kubectl port-forward service/toto-mariadb-service 3306:3306

然后你会使用一个应用程序/客户端,如MariaDB客户端访问数据库使用localhost端口3306。您还可以使用127.0.0.1 <your-desired-hostname>

创建/etc/hosts

条目详细阅读:https://kubernetes.io/docs/tasks/access-application-cluster/port-forward-access-application-cluster/#forward-a-local-port-to-a-port-on-the-pod

服务类型:LoadBalancer


这是一个更好的方法,如果你想有一个端口容易获得长期连接。您需要将type: LoadBalancer添加到您的服务规范中(参见下面的示例)。

默认情况下,如果type:从服务的spec字段中省略,它将默认为type: ClusterIP,这将只分配serviceCidr范围内的ip,这是不能从集群外访问的。

这种方法的潜在问题是,如果集群没有配置为在kubectl get svc ...时为您提供external ip,则外部ip列将停留在pending状态。如果这种情况发生在你身上,你需要看看哪些方法适合你的k8口味。常用的方法是使用metallb

apiVersion: v1
kind: Service
metadata:
name: toto-mariadb-service
spec:
selector:
name: toto-mariadb
ports:
- port: 3306
targetPort: 3306
protocol: TCP
type: LoadBalancer

然后您将使用您的应用程序/客户端与服务的external ip进行通信。使用kubectl get svc ...从服务中获取此ip

详细阅读:https://kubernetes.io/docs/concepts/services-networking/service/#loadbalancer

入口仅为HTTP。大多数数据库,包括MariaDB,都不使用http作为协议。

From the docs:

Ingress不公开任意端口或协议。向internet公开HTTP和HTTPS以外的服务通常使用service类型的服务。Type=NodePort or Service.Type=LoadBalancer.

如果您的入口控制器支持它,您可以将其公开为TCP服务。例如:https://kubernetes.github.io/ingress-nginx/user-guide/exposing-tcp-udp-services/

相关内容

  • 没有找到相关文章

最新更新