我在Dockerhub上有一个简单的Hello World应用程序,我试图在Kubernetes中运行它,但没有运气,没有任何显示。
Dockerfile:
FROM centos:7
RUN yum install httpd -y
RUN echo "Hello World" > /var/www/html/index.html
RUN chown -R apache:apache /var/www/html
EXPOSE 80
CMD [ "/usr/sbin/httpd", "-D", "FOREGROUND" ]
Kubernetes YAML:
apiVersion: apps/v1
kind: Deployment
metadata:
name: ingress-test
labels:
app: hello-world
spec:
replicas: 1
selector:
matchLabels:
app: hello-world
template:
metadata:
labels:
app: hello-world
spec:
containers:
- name: helloworld
image: 56789/world:v1
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: hello-world
spec:
selector:
app: hello-world
ports:
- protocol: "TCP"
port: 80
targetPort: 80
type: LoadBalancer
当您运行一个简单的hello world应用程序时,我假设您可能使用minikube并且您没有在云中执行此操作。
删除服务并创建这样的服务。现在您可以访问您的应用程序http://<minikube-ip>:30080
apiVersion: v1
kind: Service
metadata:
name: hello-world
spec:
selector:
app: hello-world
ports:
- protocol: "TCP"
port: 80
targetPort: 30080
type: NodePort
LoadBalancer
服务适用于AWS / Azure / Google云等云。因此,它无法在您的本地minikube中创建任何LoadBalancer。有一些变通方法可以使用你可以在这里找到的externalIPs来实现它 - https://kubernetes.io/docs/concepts/services-networking/service/
要调试此问题,假设pod正在运行且相应的端口已打开,请创建ClusterIP服务。
apiVersion: v1
kind: Service
metadata:
name: hello-world
spec:
selector:
app: hello-world
ports:
- protocol: "TCP"
port: 80
targetPort: 80
type: ClusterIP
现在首先检查您的应用程序是否可以在群集内访问。
kubectl run busybox --image=busybox --restart=Never -it --rm -- wget -O- http://hello-world/
如果它不起作用,那么pod本身就出了问题!