![](/img/trans.png)
[英]How to make host interfaces, including cni* accessible in kubernetes privileged pods?
[英]How to make HTTP/S external calls from Kubernetes pods?
我使用Kompose將以下 docker-compose 翻譯成 Kubernetes:
---
version: '3'
services:
freqtrade:
image: mllamaza/mycoolimg:latest
restart: unless-stopped
container_name: mycoolimg
volumes:
- "./user_data:/freqtrade/user_data"
ports:
- "8080:8080"
command: >
start
--logfile /data/logs/records.log
如果我在它上面運行docker-compose up -d
,它工作得很好。 但是,當在 Kubernetes 下運行等效程序時,Pod 無法進行任何外部 HTTP/S 調用並拋出此錯誤:
urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='mywebsite.com', port=443): Max retries exceeded with url: /my/cool/url/ (Caused by NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x7f95197d2a30>: Failed to establish a new connection: [Errno -3] Temporary failure in name resolution'))
此外,該圖像還有一個前端網頁,可以從http://0.0.0.0:8080
訪問。
我使用 Minikube,他們的文檔仍然是:
LoadBalancer類型的服務可以通過
minikube tunnel
命令公開。 它必須在單獨的終端 window 中運行,以保持 LoadBalancer 運行。
這正是我所做的,該命令沒有顯示錯誤:
❯ minikube tunnel
[sudo] password for mllamaza:
Status:
machine: minikube
pid: 1513359
route: 10.96.0.0/12 -> 192.168.49.2
minikube: Running
services: []
errors:
minikube: no errors
router: no errors
load balancer emulator: no errors
但是,如您所見,pod 失敗了,因為它無法訪問外部 IP(我檢查了日志),並且 service/mycoolimg 沒有配置外部 IP,如文檔中所示:
❯ k get all
NAME READY STATUS RESTARTS AGE
pod/mycoolimg-868cdd75bf-krgp6 0/1 CrashLoopBackOff 2 (15s ago) 47s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/mycoolimg ClusterIP 10.105.7.210 <none> 8080/TCP 47s
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 2d13h
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/mycoolimg 0/1 1 0 47s
NAME DESIRED CURRENT READY AGE
replicaset.apps/mycoolimg-868cdd75bf 1 1 0 47s
我錯過了什么? 這是 Kompose 轉換問題和 Minikube 特定配置,還是我缺少一些 Kubernetes 步驟?
這是服務 output:
apiVersion: v1
kind: Service
metadata:
annotations:
kompose.cmd: kompose convert --volumes hostPath -o ./deployment
kompose.version: 1.26.0 (40646f47)
creationTimestamp: null
labels:
io.kompose.service: mycoolimg
name: mycoolimg
spec:
ports:
- name: "8080"
port: 8080
targetPort: 8080
selector:
io.kompose.service: mycoolimg
status:
loadBalancer: {}
這是部署:
apiVersion: apps/v1
kind: Deployment
metadata:
annotations:
kompose.cmd: kompose convert --volumes hostPath -o ./deployment
kompose.version: 1.26.0 (40646f47)
creationTimestamp: null
labels:
io.kompose.service: mycoolimg
name: mycoolimg
spec:
replicas: 1
selector:
matchLabels:
io.kompose.service: mycoolimg
strategy:
type: Recreate
template:
metadata:
annotations:
kompose.cmd: kompose convert --volumes hostPath -o ./deployment
kompose.version: 1.26.0 (40646f47)
creationTimestamp: null
labels:
io.kompose.service: mycoolimg
spec:
containers:
- args:
- start
- --logfile
- /data/logs/records.log
image: mllamaza/mycoolimg:latest
name: mycoolimg
ports:
- containerPort: 8080
resources: {}
volumeMounts:
- mountPath: /data
name: mycoolimg-hostpath0
restartPolicy: Always
volumes:
- hostPath:
path: /udata
name: mycoolimg-hostpath0
status: {}
您應該首先查看 pod 上的CrashLoopBackOff
錯誤,這表明該容器中正在發生的事情正在使您的 pod 崩潰,您可以在此處找到一篇關於如何調試此錯誤1的非常好的文章。
根據提供的信息和代碼,問題似乎出在應用程序本身; 更准確地說,使用 Docker 和 Kubernetes 處理入口點和命令的方式,也許入口點作為命令傳遞給 Kubernetes 或反之亦然?
通過復制您的環境但使用不同的映像並取出啟動命令成功運行 pod 后得出了該結論:
---
version: '3'
services:
freqtrade:
image: expressjs
restart: unless-stopped
container_name: mycoolimg
volumes:
- "./user_data:/freqtrade/user_data"
ports:
- "8080:8080"
# command: >
# start
# --logfile /data/logs/records.log
使用 kompose 通過命令kompose convert --volumes hostPath
我得到以下 output:
WARN Restart policy 'unless-stopped' in service freqtrade is not supported, convert it to 'always'
INFO Kubernetes file "freqtrade-service.yaml" created
INFO Kubernetes file "freqtrade-deployment.yaml" created
使用命令kubectl apply -f freqtrade-deployment.yaml
,我可以看到 pod 正在運行:
NAME READY STATUS RESTARTS AGE
freqtrade-86cd7d4469-dkhmw 1/1 Running 0 7s
注意:根據您在 minikube 2中用於推/拉圖像的方法,您可能需要添加imagePullPolicy: Never
在您的容器規范下:
spec:
containers:
- image: expressjs
imagePullPolicy: Never
name: mycoolimg
ports:
- containerPort: 8080
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.