我有2个副本的部署。我可以通过curl来访问豆荚。
<table class="table table-borderless table-hover">
<thead>
<tr>
<th> </th>
<th scope="col">student.Id</th>
.............
</tr>
</thead>
<tbody>
@foreach($data as $student)
<tr class="clickable" data-toggle="collapse" id="row{{ $student['id'] }}" data-target=".row{{ $student['id'] }}">
<td>{{ $student['id'] }}</td>
</tr>
@if ($student['subjects'])
<tr>
<td colspan="3">
<table class="table table-sm table-dark collapse row{{ $student['id'] }}">
<thead>
<tr>
<th scope="col">subject.Id</th>
..............
</tr>
</thead>
<tbody>
@foreach($student['subjects'] as $subject)
<tr>
<td>{{$subject['id']}}</td>
</tr>
@endforeach
</tbody>
</table>
</td>
</tr>
@endif
@endforeach
</tbody>
</table>
我创建了一项服务。
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
replicas: 2
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80
我希望能够通过EndPoints通过该服务访问pod,但是得到的结果是。
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
有人可以帮助我更好地了解这里发生的事情吗?
kubectl获取svc
{
"kind": "Status",
"apiVersion": "v1",
"metadata": {
},
"status": "Failure",
"message": "forbidden: User \"system:anonymous\" cannot get path \"/\"",
"reason": "Forbidden",
"details": {
},
"code": 403
}
卷曲-不安全的https://PUBLICIP:6443
答案 0 :(得分:1)
使用您的命令试图访问Kubernetes API的/
路径,但是由于您没有为请求提供任何凭据,该路径失败了:
curl --insecure https://PUBLICIP:6443
但是无论如何,如果您想访问服务背后的Pod,则不需要访问Kubernetes API,但需要访问公开的服务。
无法从群集外部访问您的示例中的ClusterIP服务(默认)。如果要从群集外部访问服务,则需要创建例如NodePort服务:
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
type: NodePort
然后您可以通过一个工作节点之一的IP地址和NodePort访问服务(以及后面的Pod):
curl NODE_IP:NODE_PORT
您可以使用NODE_IP
获得其中一个节点的kubectl get nodes -o wide
,而使用NODE_PORT
获得服务的kubectl get svc nginx-service
。
答案 1 :(得分:1)
您正在使用的curl
命令将命中Kubernetes API server
(默认为6443
端口);不是您创建的服务。
您创建的nginx-service
将创建一个ClusterIP
服务,该服务将无法从外部访问。您必须使用NodePort
或LoadBalancer
类型的服务。
要访问您的服务,您可以在下面尝试(使用NodePort
)
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
type: NodePort
然后从NodePort
获得kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 2d23h
nginx-service NodePort 10.109.19.46 <none> 80:32474/TCP 22h <<<-- (NodePort is 32474)
您可以使用任何节点的IP和端口32474组合来访问服务。
例如:-
curl http://192.168.10.10:32474
答案 2 :(得分:0)
最简单的方法是使用"NodePort"
将服务公开为kubectl
,
首先,您必须删除现有服务,
kubectl delete svc nginx-service //if you have a namespace -n yourNameSpace
然后按如下所示将您的部署公开为“ NodePort”,
kubectl expose deployment nginx-deployment --port=80 --type=NodePort --name=nginx-service //if you have a namespace -n yourNameSpace
现在已经创建了“ NodePort”服务,您可以通过它来卷曲该服务,
curl NODE_IP:NODE_PORT