我有一个kubernetes设置,配置如下:
#---
kind: Service
apiVersion: v1
metadata:
name: myservice
spec:
selector:
app: my-service
ports:
- protocol: "TCP"
# Port accessible inside cluster
port: 8080
# Port to forward to inside the pod
targetPort: 80
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: my-service
spec:
replicas: 1
template:
metadata:
labels:
app: my-service
spec:
containers:
- name: my-service
image: my-custom-docker-regisry/my-service:latest
imagePullPolicy: Always
ports:
- containerPort: 8080
imagePullSecrets:
- name: regcred
和我的入口:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: test-ingress
annotations:
nginx.ingress.kubernetes.io/ssl-redirect: "false"
spec:
rules:
- http:
paths:
- path: /myservice
backend:
serviceName: myservice
servicePort: 80
我试图做的是从我的docker注册表中提取映像并在kubernetes中运行它。我在这里配置了一个部署和一个服务,并通过入口将服务暴露给外部。
我的minikube运行在IP192.168.99.100,当我试图访问我的应用程序与地址:curl192.168.99.100:80/myservice,我得到502坏网关。
有人知道为什么会发生这种情况吗?或者我在配置上做错了什么?谢谢你!
您的入口针对此服务:
serviceName: myservice
servicePort: 80
但是名为myservice
的服务公开了端口8080
而不是80
:
ports:
- protocol: "TCP"
# Port accessible inside cluster
port: 8080
# Port to forward to inside the pod
targetPort: 80
您的入口应该指向服务公开的端口之一。
此外,服务本身以端口80为目标,但部署中的pod似乎暴露了端口8080,而不是80:
containers:
- name: my-service
image: my-custom-docker-regisry/my-service:latest
imagePullPolicy: Always
ports:
- containerPort: 8080
长话短说,看起来您可以在服务
中将port
与target etPort
交换,以便:
8080
myservice
port80
,8080
myservice
port80
。
在我的情况下,它是入口控制器,没有启动,也请验证服务帐户。
使用以下命令:
controlplane ~ ➜ kubectl get all -n ingress-nginx
NAME READY STATUS
RESTARTS AGE
pod/ingress-nginx-admission-create-nrwn9 0/1 Completed 0
15m
pod/ingress-nginx-controller-5876c7c579-vpsc9 1/1 Running 0
11m
NAME TYPE CLUSTER-IP
EXTERNAL-IP PORT(S) AGE
service/ingress-nginx-controller NodePort 10.96.91.54
. none> 80:30080/TCP 11m
service/ingress-nginx-controller-admission ClusterIP 10.102.162.130
<none> 443/TCP 25m
NAME READY UP-TO-DATE
AVAILABLE AGE
deployment.apps/ingress-nginx-controller 1/1 1 1
11m
NAME DESIRED CURRENT
READY AGE
replicaset.apps/ingress-nginx-controller-5876c7c579 1 1
1 11m
NAME COMPLETIONS DURATION AGE
job.batch/ingress-nginx-admission-create 1/1 10m 25m
job.batch/ingress-nginx-admission-patch 0/1 25m 25m
controlplane ~ ➜ kubectl get sa -n ingress-nginx
NAME SECRETS AGE
default 0 26m
ingress-nginx 0 21m
ingress-nginx-admission 0 20m