Sockets 通过TCP连接在没有服务的情况下连接同一集群中的Kubernetes吊舱
我一直在试图找到不同的方法来连接库伯内特斯吊舱。我最初使用服务和节点端口连接连接了两个POD。现在我正试图使用tcp套接字来实现这一点Sockets 通过TCP连接在没有服务的情况下连接同一集群中的Kubernetes吊舱,sockets,kubernetes,tcp,Sockets,Kubernetes,Tcp,我一直在试图找到不同的方法来连接库伯内特斯吊舱。我最初使用服务和节点端口连接连接了两个POD。现在我正试图使用tcp套接字来实现这一点 kubectl get pod -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES f1 1/1 Running 4 2d18h 10.233.90.120
kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
f1 1/1 Running 4 2d18h 10.233.90.120 node1 <none> <none>
f2 1/1 Running 4 2d18h 10.233.90.117 node1 <none> <none>
我还附加了f1.yaml和f2.yaml文件
f1.yaml
apiVersion: v1
kind: Pod
metadata:
name: f1
labels:
role: f1
spec:
containers:
- name: web
image: nginx
ports:
- name: web
containerPort: 80
protocol: TCP
f2.yaml
apiVersion: v1
kind: Pod
metadata:
name: f2
labels:
role: f2
spec:
containers:
- name: f2
image: "gcr.io/google-samples/hello-go-gke:1.0"
ports:
- name: web
containerPort: 80
protocol: TCP
服务器.c
#include <stdio.h>
#include <netdb.h>
#include <netinet/in.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <sys/types.h>
#define MAX 80
#define PORT 8080
#define SA struct sockaddr
// Function designed for chat between client and server.
void func(int sockfd)
{
char buff[MAX];
int n;
// infinite loop for chat
for (;;) {
bzero(buff, MAX);
// read the message from client and copy it in buffer
read(sockfd, buff, sizeof(buff));
// print buffer which contains the client contents
printf("From client: %s\t To client : ", buff);
bzero(buff, MAX);
n = 0;
// copy server message in the buffer
while ((buff[n++] = getchar()) != '\n')
;
// and send that buffer to client
write(sockfd, buff, sizeof(buff));
// if msg contains "Exit" then server exit and chat ended.
if (strncmp("exit", buff, 4) == 0) {
printf("Server Exit...\n");
break;
}
}
}
// Driver function
int main()
{
int sockfd, connfd, len;
struct sockaddr_in servaddr, cli;
// socket create and verification
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd == -1) {
printf("socket creation failed...\n");
exit(0);
}
else
printf("Socket successfully created..\n");
bzero(&servaddr, sizeof(servaddr));
// assign IP, PORT
servaddr.sin_family = AF_INET;
// servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_addr.s_addr = htonl("f1");
servaddr.sin_port = htons(PORT);
// Binding newly created socket to given IP and verification
if ((bind(sockfd, (SA*)&servaddr, sizeof(servaddr))) != 0) {
printf("socket bind failed...\n");
exit(0);
}
else
printf("Socket successfully binded..\n");
// Now server is ready to listen and verification
if ((listen(sockfd, 5)) != 0) {
printf("Listen failed...\n");
exit(0);
}
else
printf("Server listening..\n");
len = sizeof(cli);
// Accept the data packet from client and verification
connfd = accept(sockfd, (SA*)&cli, &len);
if (connfd < 0) {
printf("server acccept failed...\n");
exit(0);
}
else
printf("server acccept the client...\n");
// Function for chatting between client and server
func(connfd);
// After chatting close the socket
close(sockfd);
}
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#定义最大值80
#定义端口8080
#定义SA结构sockaddr
//为客户端和服务器之间的聊天而设计的功能。
无效函数(int-sockfd)
{
字符buff[MAX];
int n;
//无限循环聊天
对于(;){
bzero(buff,MAX);
//从客户端读取消息并将其复制到缓冲区中
读取(sockfd、buff、sizeof(buff));
//包含客户端内容的打印缓冲区
printf(“从客户端:%s\t到客户端:”,buff);
bzero(buff,MAX);
n=0;
//在缓冲区中复制服务器消息
而((buff[n++]=getchar())!='\n')
;
//并将该缓冲区发送到客户端
写入(sockfd、buff、sizeof(buff));
//如果消息包含“退出”,则服务器退出并结束聊天。
如果(strncmp(“退出”,buff,4)=0{
printf(“服务器退出…\n”);
打破
}
}
}
//驱动函数
int main()
{
int sockfd、connfd、len;
servaddr中的struct sockaddru,cli;
//套接字创建和验证
sockfd=套接字(AF_INET,SOCK_STREAM,0);
如果(sockfd==-1){
printf(“套接字创建失败…\n”);
出口(0);
}
其他的
printf(“套接字已成功创建..\n”);
bzero(&servaddr,sizeof(servaddr));
//分配IP、端口
servaddr.sin_family=AF_INET;
//servaddr.sin\u addr.s\u addr=htonl(INADDR\u ANY);
servaddr.sin_addr.s_addr=htonl(“f1”);
servaddr.sinu端口=htons(端口);
//将新创建的套接字绑定到给定的IP和验证
如果((bind(sockfd,(SA*)&servaddr,sizeof(servaddr)))!=0{
printf(“套接字绑定失败…\n”);
出口(0);
}
其他的
printf(“套接字成功绑定..\n”);
//现在服务器已准备好侦听和验证
如果((听(sockfd,5))!=0{
printf(“侦听失败…\n”);
出口(0);
}
其他的
printf(“服务器侦听..\n”);
len=sizeof(cli);
//接受来自客户端的数据包并进行验证
connfd=accept(sockfd,(SA*)&cli和len);
如果(connfd<0){
printf(“服务器访问失败…\n”);
出口(0);
}
其他的
printf(“服务器接受客户端…\n”);
//客户端和服务器之间的聊天功能
func(connfd);
//聊天结束后,关闭插座
关闭(sockfd);
}
客户c
#include <netdb.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#define MAX 80
#define PORT 8080
#define SA struct sockaddr
void func(int sockfd)
{
char buff[MAX];
int n;
for (;;) {
bzero(buff, sizeof(buff));
printf("Enter the string : ");
n = 0;
while ((buff[n++] = getchar()) != '\n')
;
write(sockfd, buff, sizeof(buff));
bzero(buff, sizeof(buff));
read(sockfd, buff, sizeof(buff));
printf("From Server : %s", buff);
if ((strncmp(buff, "exit", 4)) == 0) {
printf("Client Exit...\n");
break;
}
}
}
int main()
{
int sockfd, connfd;
struct sockaddr_in servaddr, cli;
// socket create and varification
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd == -1) {
printf("socket creation failed...\n");
exit(0);
}
else
printf("Socket successfully created..\n");
bzero(&servaddr, sizeof(servaddr));
// assign IP, PORT
servaddr.sin_family = AF_INET;
// servaddr.sin_addr.s_addr = inet_addr("127.0.0.1");
servaddr.sin_addr.s_addr = inet_addr("f2");
servaddr.sin_port = htons(PORT);
// connect the client socket to server socket
if (connect(sockfd, (SA*)&servaddr, sizeof(servaddr)) != 0) {
printf("connection with the server failed...\n");
exit(0);
}
else
printf("connected to the server..\n");
// function for chat
func(sockfd);
// close the socket
close(sockfd);
}
#包括
#包括
#包括
#包括
#包括
#定义最大值80
#定义端口8080
#定义SA结构sockaddr
无效函数(int-sockfd)
{
字符buff[MAX];
int n;
对于(;){
bzero(buff,sizeof(buff));
printf(“输入字符串:”);
n=0;
而((buff[n++]=getchar())!='\n')
;
写入(sockfd、buff、sizeof(buff));
bzero(buff,sizeof(buff));
读取(sockfd、buff、sizeof(buff));
printf(“来自服务器:%s”,buff);
如果((strncmp(buff,“exit”,4))==0{
printf(“客户端退出…\n”);
打破
}
}
}
int main()
{
int sockfd,connfd;
servaddr中的struct sockaddru,cli;
//套接字创建和变体
sockfd=套接字(AF_INET,SOCK_STREAM,0);
如果(sockfd==-1){
printf(“套接字创建失败…\n”);
出口(0);
}
其他的
printf(“套接字已成功创建..\n”);
bzero(&servaddr,sizeof(servaddr));
//分配IP、端口
servaddr.sin_family=AF_INET;
//servaddr.sin_addr.s_addr=inet_addr(“127.0.0.1”);
servaddr.sin_addr.s_addr=inet_addr(“f2”);
servaddr.sinu端口=htons(端口);
//将客户端套接字连接到服务器套接字
如果(connect(sockfd,(SA*)&servaddr,sizeof(servaddr))!=0{
printf(“与服务器的连接失败…\n”);
出口(0);
}
其他的
printf(“连接到服务器..\n”);
//聊天功能
func(sockfd);
//合上插座
关闭(sockfd);
}
如果您想将一个Pod连接到另一个Pod,您可以使用它们的内部Pod IP(10.233.90.120
,10.233.90.117
)或它们的Pod名称f1
,f2
(应该自动通过DNS解析到它们的内部Pod IP)。你不应该对此有任何问题。你不需要任何服务。如果他们无法连接,请添加日志和他们运行的代码
如果要从Kubernetes群集外部连接到POD,则需要使用以下方式公开它们:
- 节点端口/负载平衡器服务或
- 库贝特港前进
您应该始终能够建立TCP套接字连接。我在这里遵循了服务器和客户端代码:。在服务器中,我输入了10.233.90.120,在客户端,我将IP更改为10.233.90.117。但是它显示了绑定失败的错误。这些pod在同一个集群中。另外,我再次运行了命令kubectl get pod-o wide。IPS更改为10.233.90.135和10.233.90.134。这正常吗?这可能是绑定失败的原因吗?
#include <netdb.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#define MAX 80
#define PORT 8080
#define SA struct sockaddr
void func(int sockfd)
{
char buff[MAX];
int n;
for (;;) {
bzero(buff, sizeof(buff));
printf("Enter the string : ");
n = 0;
while ((buff[n++] = getchar()) != '\n')
;
write(sockfd, buff, sizeof(buff));
bzero(buff, sizeof(buff));
read(sockfd, buff, sizeof(buff));
printf("From Server : %s", buff);
if ((strncmp(buff, "exit", 4)) == 0) {
printf("Client Exit...\n");
break;
}
}
}
int main()
{
int sockfd, connfd;
struct sockaddr_in servaddr, cli;
// socket create and varification
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd == -1) {
printf("socket creation failed...\n");
exit(0);
}
else
printf("Socket successfully created..\n");
bzero(&servaddr, sizeof(servaddr));
// assign IP, PORT
servaddr.sin_family = AF_INET;
// servaddr.sin_addr.s_addr = inet_addr("127.0.0.1");
servaddr.sin_addr.s_addr = inet_addr("f2");
servaddr.sin_port = htons(PORT);
// connect the client socket to server socket
if (connect(sockfd, (SA*)&servaddr, sizeof(servaddr)) != 0) {
printf("connection with the server failed...\n");
exit(0);
}
else
printf("connected to the server..\n");
// function for chat
func(sockfd);
// close the socket
close(sockfd);
}