如何解决K8s和Nginx:[emerg] bind到[::]:80失败98:使用中的地址
大家好!
我需要以下问题的帮助。 所以我的项目是在裸机上使用nginx容器的k8s。
我有从makefile构建的Docker容器:
FROM alpine
RUN apk update
RUN apk add nginx vim net-tools bash
COPY start.sh ./tmp/start.sh
COPY nginx.conf ./tmp
RUN mv -f /tmp/nginx.conf /etc/nginx/nginx.conf
RUN mkdir -p www/test.com
COPY index.html ./tmp
RUN mv -f /tmp/index.html /www/test.com/index.html
EXPOSE 80 443
ENTRYPOINT nginx -g "daemon off;"
我的nginx配置:
events {
worker_connections 1024;
}
http {
server {
listen [::]:80;
server_name test.com www.test.com;
root /www/test.com;
index index.html;
location / {
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
}
}
}
具有此配置的此容器是稳定的,因此在以下情况下:
docker build --tag nginx_img .
docker run -it -p80:80 nginx_img
本地主机正在工作。
之后,我想将此容器放入k8s。我用的是MetalLB。
我的nginx服务+部署(nginx.yaml):
apiVersion: v1
kind: Service
metadata:
name: my-nginx
labels:
run: my-nginx
spec:
type: LoadBalancer
ports:
- port: 80
protocol: TCP
selector:
run: my-nginx
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-nginx
spec:
selector:
matchLabels:
run: my-nginx
replicas: 1
template:
metadata:
labels:
run: my-nginx
spec:
containers:
- name: nginx-container
image: nginx_img
imagePullPolicy: Never
ports:
- containerPort: 80
最后,启动脚本:
minikube start
#Nginx deployment
cd srcs/nginx
eval $(minikube docker-env)
docker build --tag nginx_img .
kubectl apply -f nginx.yaml
cd ../..
#Dashboard install
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0/aio/deploy/recommended.yaml
kubectl apply -f srcs/dashboard-adminuser.yaml
kubectl apply -f srcs/dashboard-cluster.yaml
#MetalLB install
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.9.3/manifests/namespace.yaml
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.9.3/manifests/metallb.yaml
kubectl apply -f srcs/metalLB/metallb-config.yaml
kubectl proxy
所以在此之后,我有以下信息:
xserg:~/Desktop/ft_services_tmp$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
minikube Ready master 3h59m v1.18.3
xserg:~/Desktop/ft_services_tmp$ kubectl get pods
NAME READY STATUS RESTARTS AGE
my-nginx-74dc86d4cb-69dks 1/1 Running 0 31m
xserg:~/Desktop/ft_services_tmp$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 32m
my-nginx LoadBalancer 10.110.233.84 192.168.100.100 80:31860/TCP 31m
因此外部地址为192.168.100.100,但是站点不可用。代理输出:
2020/10/05 14:38:24 http: proxy error: context canceled
pod中的数据:
xserg:~/Desktop/ft_services_tmp$ kubectl exec -it my-nginx-74dc86d4cb-69dks -- bash
bash-5.0# nginx
nginx: [emerg] bind() to [::]:80 failed (98: Address in use)
nginx: [emerg] bind() to [::]:80 failed (98: Address in use)
nginx: [emerg] bind() to [::]:80 failed (98: Address in use)
nginx: [emerg] bind() to [::]:80 failed (98: Address in use)
nginx: [emerg] bind() to [::]:80 failed (98: Address in use)
nginx: [emerg] still could not bind()
bash-5.0# netstat
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags Type State I-Node Path
unix 3 [ ] STREAM CONNECTED 243830
unix 3 [ ] STREAM CONNECTED 243831
bash-5.0# netstat -tulpn
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp6 0 0 :::80 :::* LISTEN 1/nginx: master pro
所以,我不知道出了什么问题?没有任何服务使用端口80。几天来我试图解决它,但是现在我什么都没有了。
PS。我试过听80;或听80;听[::]:80 ipv6only = on;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。