如果不指定Service的spec.type的值,創建的Service的類型默認為ClusterIP類型。這種類型的Service只會得到虛擬的IP和端口,只能在Kubernetes集群內部被訪問。
如果指定Service的spec.type的值為“NodePort”,創建的Service的類型默認為NodePort類型。這種類型的Service除了會得到虛擬的IP和端口,Kubernetes還會在所有Node節點上為其分配端口。分配的端口的值可以通過spec.ports[*].nodePort指定,或由Knubernetes在配置好的區間里分配(默認為30000-32767)。這種Service即可以從Kubernetes集群通過虛擬IP:端口訪問,也可以從集群外部通過Node節點的IP:nodePort訪問
如果指定Service的spec.type的值為“LoadBalancer”,創建的Service的類型默認為LoadBalancer類型。這種類型的Service除了會得到虛擬的IP和端口,Kubernetes還會在所有Node節點上為其分配端口,然后為其開通負載均衡。這種Service即可以從Kubernetes集群通過虛擬IP:端口訪問,也可以從集群外部通過Node節點的IP:nodePort訪問,還可以通過負載均衡的IP訪問。
pyxis-controller.yaml
apiVersion: v1
kind: ReplicationController
metadata:
name: firmament-pyxis
namespace: sky-firmament
labels:
app: firmament-pyxis
version: v0.3
spec:
replicas: 1
selector:
app: firmament-pyxis
template:
metadata:
labels:
app: firmament-pyxis
version: v0.3
spec:
nodeName: gprsgx11
containers:
- name: firmament-pyxis
image: reg.ai.cbbscloud.com:5000/pyxis:v0.3
imagePullPolicy: Always
env:
- name: KUBERNETES_URL
valueFrom:
configMapKeyRef:
name: config
key: kubernetes.url
resources:
limits:
cpu: 500m
memory: 200Mi
requests:
cpu: 500m
memory: 200Mi
ports:
- containerPort: 8080
volumeMounts:
- name: kubectl-path
mountPath: /usr/bin/kubectl
volumes:
- name: kubectl-path
hostPath:
path: /usr/bin/kubectl
pyxis-service.yaml
apiVersion: v1
kind: Service
metadata:
name: pyxis-firmament-com
namespace: sky-firmament
labels:
app: firmament-pyxis
spec:
selector:
app: firmament-pyxis
ports:
- port: 8081
targetPort: 8080
nodePort: 31081
type: NodePort
