Kubernetes 部署不可公开访问
Kubernetes deployment not publicly accesible
我正在尝试访问我们在 Azure 上的 Kubernetes 集群上的部署。这是 Azure Kubernetes 服务 (AKS)。以下是部署的配置文件和应该公开部署的服务。
配置
apiVersion: apps/v1
kind: Deployment
metadata:
name: mira-api-deployment
spec:
replicas: 1
selector:
matchLabels:
app: mira-api
template:
metadata:
labels:
app: mira-api
spec:
containers:
- name: backend
image: registry.gitlab.com/izit/mira-backend
ports:
- containerPort: 8080
name: http
protocol: TCP
imagePullSecrets:
- name: regcred
apiVersion: v1
kind: Service
metadata:
name: mira-api-service
spec:
type: LoadBalancer
ports:
- port: 80
targetPort: 8080
protocol: TCP
name: http
selector:
run: mira-api
当我在应用这些配置后检查集群时,我正确地看到了 pod 运行。还创建了该服务并分配了 public IP。
在此部署之后,我没有看到任何请求得到处理。我在浏览器中收到一条错误消息,指出该站点无法访问。有什么想法我可能配置错了吗?
您的服务选择器标签和 pod 标签不匹配。
您在部署的 pod 模板中有 app: mira-api
标签,但在服务的标签选择器中有 run: mira-api
。
更改您的服务选择器标签以匹配 pod 标签,如下所示。
apiVersion: v1
kind: Service
metadata:
name: mira-api-service
spec:
type: LoadBalancer
ports:
- port: 80
targetPort: 8080
protocol: TCP
name: http
selector:
app: mira-api
要确保您的服务正在选择后端 pods,您可以 运行 kubectl describe svc <svc name>
命令并检查它是否列出了任何 Endpoints
。
# kubectl describe svc postgres
Name: postgres
Namespace: default
Labels: app=postgres
Annotations: kubectl.kubernetes.io/last-applied-configuration:
{"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"labels":{"app":"postgres"},"name":"postgres","namespace":"default"},"s...
Selector: app=postgres
Type: ClusterIP
IP: 10.106.7.183
Port: default 5432/TCP
TargetPort: 5432/TCP
Endpoints: 10.244.2.117:5432 <------- This line
Session Affinity: None
Events: <none>
我正在尝试访问我们在 Azure 上的 Kubernetes 集群上的部署。这是 Azure Kubernetes 服务 (AKS)。以下是部署的配置文件和应该公开部署的服务。
配置
apiVersion: apps/v1
kind: Deployment
metadata:
name: mira-api-deployment
spec:
replicas: 1
selector:
matchLabels:
app: mira-api
template:
metadata:
labels:
app: mira-api
spec:
containers:
- name: backend
image: registry.gitlab.com/izit/mira-backend
ports:
- containerPort: 8080
name: http
protocol: TCP
imagePullSecrets:
- name: regcred
apiVersion: v1
kind: Service
metadata:
name: mira-api-service
spec:
type: LoadBalancer
ports:
- port: 80
targetPort: 8080
protocol: TCP
name: http
selector:
run: mira-api
当我在应用这些配置后检查集群时,我正确地看到了 pod 运行。还创建了该服务并分配了 public IP。
在此部署之后,我没有看到任何请求得到处理。我在浏览器中收到一条错误消息,指出该站点无法访问。有什么想法我可能配置错了吗?
您的服务选择器标签和 pod 标签不匹配。
您在部署的 pod 模板中有 app: mira-api
标签,但在服务的标签选择器中有 run: mira-api
。
更改您的服务选择器标签以匹配 pod 标签,如下所示。
apiVersion: v1
kind: Service
metadata:
name: mira-api-service
spec:
type: LoadBalancer
ports:
- port: 80
targetPort: 8080
protocol: TCP
name: http
selector:
app: mira-api
要确保您的服务正在选择后端 pods,您可以 运行 kubectl describe svc <svc name>
命令并检查它是否列出了任何 Endpoints
。
# kubectl describe svc postgres
Name: postgres
Namespace: default
Labels: app=postgres
Annotations: kubectl.kubernetes.io/last-applied-configuration:
{"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"labels":{"app":"postgres"},"name":"postgres","namespace":"default"},"s...
Selector: app=postgres
Type: ClusterIP
IP: 10.106.7.183
Port: default 5432/TCP
TargetPort: 5432/TCP
Endpoints: 10.244.2.117:5432 <------- This line
Session Affinity: None
Events: <none>