嗨,我正在学习 Helm 和 Kubernetes。我陷入困境,无法从集群外部访问我的应用程序。 我正在使用 minikube v1.32.0 和 docker 的驱动程序。
我尝试使用负载均衡器、节点端口、隧道、服务。每次我收到 404 或连接超时。
这是我的应用程序的图表:
# Source: app-chart/templates/serviceaccount.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: release-name-app-chart
labels:
helm.sh/chart: app-chart-0.1.0
app.kubernetes.io/name: app-chart
app.kubernetes.io/instance: release-name
app.kubernetes.io/version: "1.16.0"
app.kubernetes.io/managed-by: Helm
automountServiceAccountToken: true
---
# Source: app-chart/templates/service.yaml
kind: Service
apiVersion: v1
metadata:
name: app-service
spec:
allocateLoadBalancerNodePorts: false
selector:
app: helmapp
ports:
- protocol: "TCP"
# Port accessible inside cluster
port: 8080
# Port to forward to inside the pod
targetPort: 8080
type: LoadBalancer
我的部署:
# Source: app-chart/templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: release-name-app-chart
labels:
helm.sh/chart: app-chart-0.1.0
app.kubernetes.io/name: app-chart
app.kubernetes.io/instance: release-name
app.kubernetes.io/version: "1.16.0"
app.kubernetes.io/managed-by: Helm
spec:
replicas: 1
selector:
matchLabels:
app.kubernetes.io/name: app-chart
app.kubernetes.io/instance: release-name
app: helmapp
template:
metadata:
labels:
helm.sh/chart: app-chart-0.1.0
app.kubernetes.io/name: app-chart
app.kubernetes.io/instance: release-name
app.kubernetes.io/version: "1.16.0"
app.kubernetes.io/managed-by: Helm
app: helmapp
spec:
serviceAccountName: release-name-app-chart
securityContext:
{}
containers:
- image: "myrepo/helm-app:latest"
name: app-chart
ports:
- containerPort: 8080
protocol: TCP
resources:
{}
我的入口:
# Source: app-chart/templates/tests/test-connection.yaml
apiVersion: v1
kind: Pod
metadata:
name: "release-name-app-chart-test-connection"
labels:
helm.sh/chart: app-chart-0.1.0
app.kubernetes.io/name: app-chart
app.kubernetes.io/instance: release-name
app.kubernetes.io/version: "1.16.0"
app.kubernetes.io/managed-by: Helm
annotations:
"helm.sh/hook": test
spec:
containers:
- name: wget
image: busybox
command: ['wget']
args: ['release-name-app-chart:8080']
restartPolicy: Never
我的应用程序是一个简单的 SpringBoot 项目,其端点返回代码 200。
@GetMapping("/health")
public ResponseEntity<String> healthCheck() {
return ResponseEntity.ok("OK");
}
Minikube 需要使用
minikube tunnel
来颁发 IP,允许您从集群外部访问服务。
在单独的终端窗口中运行该程序后,您应该会找到分配给您的服务的 IP,当发生这种情况时,您可以使用
localhost:{port}/{path}
访问您的服务