我有兩個使用部署和服務創建的 pod。我的問題如下 pod “my-gateway”訪問了“http://127.0.0.1:3000/adm-contact”的 url “adm-contact”,它訪問了另一個名為“my-adm-contact”的 pod我做這個作業?我嘗試了以下命令:kubectl port-forward my-gateway-5b85498f7d-5rwnn 3000:3000 8879:8879但它給出了這個錯誤:
E0526 21:56:34.024296 12428 portforward.go:400] an error occurred forwarding 3000 -> 3000: error forwarding port 3000 to pod 2d5811c20c3762c6c249a991babb71a107c5dd6b080c3c6d61b4a275b5747815, uid : exit status 1: 2022/05/27 00:56:35 socat[2494] E connect(16, AF=2 127.0.0.1:3000, 16): Connection refused
請記住,使用dockerfile創建的影像使用EXPOSE 3000 8879 跟隨我的 yamls:
部署my-adm-contact:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-adm-contact
labels:
app: my-adm-contact
spec:
selector:
matchLabels:
run: my-adm-contact
template:
metadata:
labels:
run: my-adm-contact
spec:
containers:
- name: my-adm-contact
image: my-contact-adm
imagePullPolicy: Never
ports:
- containerPort: 8879
hostPort: 8879
name: admcontact8879
readinessProbe:
httpGet:
path: /adm-contact
port: 8879
initialDelaySeconds: 30
periodSeconds: 10
failureThreshold: 6
服務my-adm-contact :
apiVersion: v1
kind: Service
metadata:
name: my-adm-contact
labels:
run: my-adm-contact
spec:
selector:
app: my-adm-contact
ports:
- name: 8879-my-adm-contact
port: 8879
protocol: TCP
targetPort: 8879
type: LoadBalancer
status:
loadBalancer: {}
部署我的網關:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-gateway
labels:
app: my-gateway
spec:
selector:
matchLabels:
run: my-gateway
template:
metadata:
labels:
run: my-gateway
spec:
containers:
- name: my-gateway
image: api-gateway
imagePullPolicy: Never
ports:
- containerPort: 3000
hostPort: 3000
name: home
#- containerPort: 8879
# hostPort: 8879
# name: adm
readinessProbe:
httpGet:
path: /adm-contact
port: 8879
path: /
port: 3000
initialDelaySeconds: 30
periodSeconds: 10
failureThreshold: 6
服務我的網關:
apiVersion: v1
kind: Service
metadata:
name: my-gateway
labels:
run: my-gateway
spec:
selector:
app: my-gateway
ports:
- name: 3000-my-gateway
port: 3000
protocol: TCP
targetPort: 3000
- name: 8879-my-gateway
port: 8879
protocol: TCP
targetPort: 8879
type: LoadBalancer
status:
loadBalancer: {}
uj5u.com熱心網友回復:
我的 yaml
豆莢聯系人:
apiVersion: v1
kind: Pod
metadata:
name: my-adm-contact
labels:
app: my-adm-contact
name: my-adm-contact
spec:
containers:
- image: my-contact-adm
imagePullPolicy: Never
name: my-adm-contact
ports:
- containerPort: 8879
protocol: TCP
- containerPort: 3000
protocol: TCP
服務聯系人:
apiVersion: v1
kind: Service
metadata:
name: my-adm-contact-service
spec:
ports:
- port: 8879
protocol: TCP
targetPort: 8879
name: adm8879
- port: 3000
protocol: TCP
targetPort: 3000
name: adm3000
selector:
app: my-adm-contact
type: ClusterIP
Pod 網關:
apiVersion: v1
kind: Pod
metadata:
name: my-gateway
labels:
app: my-gateway
name: my-gateway
spec:
containers:
- image: api-gateway
imagePullPolicy: Never
name: my-gateway
ports:
- containerPort: 3000
protocol: TCP
服務網關:
apiVersion: v1
kind: Service
metadata:
name: gateway-service
spec:
ports:
- port: 3000
protocol: TCP
targetPort: 3000
selector:
app: my-gateway
type: ClusterIP
uj5u.com熱心網友回復:
你在什么 k8s-cluster 環境中運行它?我問是因為service.typeLoadBalancer 是一種特殊的型別:在 pod 初始化時,您的云提供商的準入控制器會發現這一點并添加負載平衡器配置參見https://kubernetes.io/docs/concepts/services-networking/service/#loadbalancer
如果您沒有在合適的云環境中部署它,您的服務將不會做任何事情。
我快速瀏覽了您的 SO 個人資料 - 抱歉,如果這是冒昧的,我不是故意的 - 看起來您對 k8s 比較陌生。您不需要做任何埠轉發/kubectl 代理,這應該比您想象的要簡單得多。
當您創建服務時,k8s 將為您“創建”一個 DNS 條目,該條目指向您的選擇器指定的 pod。
我認為您正在嘗試建立一個設定,其中在my-gatewaypod 中運行的代碼可以連接到http://adm-contact埠 3000 并到達adm-contactpod 上的偵聽服務。那是對的嗎?
如果是這樣,大致的解決方案是在 adm-contact pod 中公開 tcp/3000,并創建一個名為 adm-contact 的服務,該服務具有 adm-contact pod 的選擇器。
這是我剛剛創建的一個示例清單,它運行 nginx,然后為它創建一個服務,允許集群上的任何 pod 連接到它,例如 curl http://nginx-service.default.svc在這個例子中,我是暴露 80 埠是因為我不想修改 nginx 配置,但原理是一樣的。
apiVersion: v1
kind: Pod
metadata:
labels:
app: nginx
name: nginx
spec:
containers:
- image: nginx
imagePullPolicy: Always
name: nginx
ports:
- containerPort: 80
protocol: TCP
---
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
app: nginx
type: ClusterIP
如果您想要更多https://kubernetes.io/docs/concepts/services-networking/connect-applications-service/,服務上的 k8s 檔案非常有用
uj5u.com熱心網友回復:
可以從其命名空間中的 pod 以自己的名稱訪問服務:
因此可以從命名空間中的 pod 訪問foo命名空間中的服務barhttp://foobar
從其他命名空間,該服務可在http://foo.bar.svc.cluster.local. 更改用例的服務名稱和命名空間。
k8s dns 在檔案中進行了解釋: https ://kubernetes.io/docs/concepts/services-networking/dns-pod-service/
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/483213.html
標籤:Kubernetes 巢穴
