为什么我的服务不能将流量传递到 minikube 上具有命名端口的 pod?
Why can't my service pass traffic to a pod with a named port on minikube?
我在使用 Marko Luksa 的 Kubernetes In Action 的第 5.1.1 使用命名端口 节中的示例时遇到问题。这个例子是这样的:
首先 - 创建
我正在创建一个带有命名端口的 pod,它运行一个 Node.js 容器,当它被命中时以 You've hit <hostname>
响应:
apiVersion: v1
kind: Pod
metadata:
name: named-port-pod
labels:
app: named-port
spec:
containers:
- name: kubia
image: michaellundquist/kubia
ports:
- name: http
containerPort: 8080
还有这样的服务(请注意,这是 original example 的简化版本,它也不起作用。:
apiVersion: v1
kind: Service
metadata:
name: named-port-service
spec:
ports:
- name: http
port: 80
targetPort: http
selector:
app: named-port
其次 - 验证
$ kubectl get po -o wide --show-labels
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES LABELS
named-port-pod 1/1 Running 0 45m 172.17.0.7 minikube <none> <none> app=named-port
$ kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 53m
named-port-service ClusterIP 10.96.115.108 <none> 80/TCP 19m
$ kubectl describe service named-port-service
Name: named-port-service
Namespace: default
Labels: <none>
Annotations: <none>
Selector: app=named-port
Type: ClusterIP
IP: 10.96.115.108
Port: http 80/TCP
TargetPort: http/TCP
Endpoints: 172.17.0.7:8080
Session Affinity: None
Events: <none>
第三 - 测试(失败)
$ kubectl exec named-port-pod -- curl named-port-pod:8080
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 26 0 26 0 0 5494 0 --:--:-- --:--:-- --:--:-- 6500
You've hit named-port-pod
$ kubectl exec named-port-pod -- curl --max-time 20 named-port-service
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- 0:00:19 --:--:-- 0curl: (28) Connection timed out after 20001 milliseconds
command terminated with exit code 28
如您所见,当我点击 named-port-pod:8080
时一切正常,但当我点击 named-port-service
时一切都失败了。我很确定我的映射是正确的,因为 kubectl describe service named-port-service
有正确的端点我认为 minikube can use named ports 但我的服务无法将连接传递到我的 pod。为什么?
p.s 这是我的 minikube 版本:
$ minikube version
minikube version: v1.6.2
commit: 54f28ac5d3a815d1196cd5d57d707439ee4bb392
这是 minikube 的已知问题。 Pod 无法通过服务 IP 访问自身。您可以尝试从不同的 pod 访问您的服务或使用以下解决方法来解决此问题。
minikube ssh
sudo ip link set docker0 promisc on
我在使用 Marko Luksa 的 Kubernetes In Action 的第 5.1.1 使用命名端口 节中的示例时遇到问题。这个例子是这样的:
首先 - 创建
我正在创建一个带有命名端口的 pod,它运行一个 Node.js 容器,当它被命中时以 You've hit <hostname>
响应:
apiVersion: v1
kind: Pod
metadata:
name: named-port-pod
labels:
app: named-port
spec:
containers:
- name: kubia
image: michaellundquist/kubia
ports:
- name: http
containerPort: 8080
还有这样的服务(请注意,这是 original example 的简化版本,它也不起作用。:
apiVersion: v1
kind: Service
metadata:
name: named-port-service
spec:
ports:
- name: http
port: 80
targetPort: http
selector:
app: named-port
其次 - 验证
$ kubectl get po -o wide --show-labels
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES LABELS
named-port-pod 1/1 Running 0 45m 172.17.0.7 minikube <none> <none> app=named-port
$ kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 53m
named-port-service ClusterIP 10.96.115.108 <none> 80/TCP 19m
$ kubectl describe service named-port-service
Name: named-port-service
Namespace: default
Labels: <none>
Annotations: <none>
Selector: app=named-port
Type: ClusterIP
IP: 10.96.115.108
Port: http 80/TCP
TargetPort: http/TCP
Endpoints: 172.17.0.7:8080
Session Affinity: None
Events: <none>
第三 - 测试(失败)
$ kubectl exec named-port-pod -- curl named-port-pod:8080
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 26 0 26 0 0 5494 0 --:--:-- --:--:-- --:--:-- 6500
You've hit named-port-pod
$ kubectl exec named-port-pod -- curl --max-time 20 named-port-service
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- 0:00:19 --:--:-- 0curl: (28) Connection timed out after 20001 milliseconds
command terminated with exit code 28
如您所见,当我点击 named-port-pod:8080
时一切正常,但当我点击 named-port-service
时一切都失败了。我很确定我的映射是正确的,因为 kubectl describe service named-port-service
有正确的端点我认为 minikube can use named ports 但我的服务无法将连接传递到我的 pod。为什么?
p.s 这是我的 minikube 版本:
$ minikube version
minikube version: v1.6.2
commit: 54f28ac5d3a815d1196cd5d57d707439ee4bb392
这是 minikube 的已知问题。 Pod 无法通过服务 IP 访问自身。您可以尝试从不同的 pod 访问您的服务或使用以下解决方法来解决此问题。
minikube ssh
sudo ip link set docker0 promisc on